diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 000000000..93a2ee965
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,12 @@
+root = true
+
+[*]
+indent_style = tab
+charset = utf-8
+end_of_line = lf
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.yml]
+indent_style = space
+indent_size = 2
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..964d223f3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+# IDE - IntelliJ
+.idea/*
+# Keep the code styles.
+!.idea/codeStyles
+.idea/codeStyles/*
+!.idea/codeStyles/Project.xml
+!.idea/codeStyles/codeStyleConfig.xml
+# Keep the inspection levels
+!.idea/inspectionProfiles
+.idea/inspectionProfiles/*
+!.idea/inspectionProfiles/Project_Default.xml
+
+# project stuff
+.build/*
+docs/*
+vendor/*
+composer.lock
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 000000000..0d9148f39
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,888 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 000000000..79ee123c2
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 000000000..fcf7b674d
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.phan/config.php b/.phan/config.php
new file mode 100644
index 000000000..442d5f7d5
--- /dev/null
+++ b/.phan/config.php
@@ -0,0 +1,55 @@
+ '7.4',
+
+ // A list of directories that should be parsed for class and
+ // method information. After excluding the directories
+ // defined in exclude_analysis_directory_list, the remaining
+ // files will be statically analyzed for errors.
+ //
+ // Thus, both first-party and third-party code being used by
+ // your application should be included in this list.
+ 'directory_list' => [
+ 'examples',
+ 'src',
+ 'tests',
+ 'vendor',
+ '.phan/stubs'
+ ],
+
+ // A regex used to match every file name that you want to
+ // exclude from parsing. Actual value will exclude every
+ // "test", "tests", "Test" and "Tests" folders found in
+ // "vendor/" directory.
+ 'exclude_file_regex' => '@^vendor/.*/(tests?|Tests?)/@',
+
+ // A directory list that defines files that will be excluded
+ // from static analysis, but whose class and method
+ // information should be included.
+ //
+ // Generally, you'll want to include the directories for
+ // third-party code (such as "vendor/") in this list.
+ //
+ // n.b.: If you'd like to parse but not analyze 3rd
+ // party code, directories containing that code
+ // should be added to both the `directory_list`
+ // and `exclude_analysis_directory_list` arrays.
+ 'exclude_analysis_directory_list' => [
+ 'vendor/',
+ '.phan/stubs'
+ ],
+];
diff --git a/.phan/stubs/imagick.php b/.phan/stubs/imagick.php
new file mode 100644
index 000000000..508d2018f
--- /dev/null
+++ b/.phan/stubs/imagick.php
@@ -0,0 +1,6744 @@
+Makes an exact copy of the Imagick object
+ * @link https://php.net/manual/en/class.imagick.php
+ */
+class Imagick implements Iterator, Countable {
+ const COLOR_BLACK = 11;
+ const COLOR_BLUE = 12;
+ const COLOR_CYAN = 13;
+ const COLOR_GREEN = 14;
+ const COLOR_RED = 15;
+ const COLOR_YELLOW = 16;
+ const COLOR_MAGENTA = 17;
+ const COLOR_OPACITY = 18;
+ const COLOR_ALPHA = 19;
+ const COLOR_FUZZ = 20;
+ const IMAGICK_EXTNUM = 30403;
+ const IMAGICK_EXTVER = "3.4.3";
+ const QUANTUM_RANGE = 65535;
+ const USE_ZEND_MM = 0;
+ const COMPOSITE_DEFAULT = 40;
+ const COMPOSITE_UNDEFINED = 0;
+ const COMPOSITE_NO = 1;
+ const COMPOSITE_ADD = 2;
+ const COMPOSITE_ATOP = 3;
+ const COMPOSITE_BLEND = 4;
+ const COMPOSITE_BUMPMAP = 5;
+ const COMPOSITE_CLEAR = 7;
+ const COMPOSITE_COLORBURN = 8;
+ const COMPOSITE_COLORDODGE = 9;
+ const COMPOSITE_COLORIZE = 10;
+ const COMPOSITE_COPYBLACK = 11;
+ const COMPOSITE_COPYBLUE = 12;
+ const COMPOSITE_COPY = 13;
+ const COMPOSITE_COPYCYAN = 14;
+ const COMPOSITE_COPYGREEN = 15;
+ const COMPOSITE_COPYMAGENTA = 16;
+ const COMPOSITE_COPYOPACITY = 17;
+ const COMPOSITE_COPYRED = 18;
+ const COMPOSITE_COPYYELLOW = 19;
+ const COMPOSITE_DARKEN = 20;
+ const COMPOSITE_DSTATOP = 21;
+ const COMPOSITE_DST = 22;
+ const COMPOSITE_DSTIN = 23;
+ const COMPOSITE_DSTOUT = 24;
+ const COMPOSITE_DSTOVER = 25;
+ const COMPOSITE_DIFFERENCE = 26;
+ const COMPOSITE_DISPLACE = 27;
+ const COMPOSITE_DISSOLVE = 28;
+ const COMPOSITE_EXCLUSION = 29;
+ const COMPOSITE_HARDLIGHT = 30;
+ const COMPOSITE_HUE = 31;
+ const COMPOSITE_IN = 32;
+ const COMPOSITE_LIGHTEN = 33;
+ const COMPOSITE_LUMINIZE = 35;
+ const COMPOSITE_MINUS = 36;
+ const COMPOSITE_MODULATE = 37;
+ const COMPOSITE_MULTIPLY = 38;
+ const COMPOSITE_OUT = 39;
+ const COMPOSITE_OVER = 40;
+ const COMPOSITE_OVERLAY = 41;
+ const COMPOSITE_PLUS = 42;
+ const COMPOSITE_REPLACE = 43;
+ const COMPOSITE_SATURATE = 44;
+ const COMPOSITE_SCREEN = 45;
+ const COMPOSITE_SOFTLIGHT = 46;
+ const COMPOSITE_SRCATOP = 47;
+ const COMPOSITE_SRC = 48;
+ const COMPOSITE_SRCIN = 49;
+ const COMPOSITE_SRCOUT = 50;
+ const COMPOSITE_SRCOVER = 51;
+ const COMPOSITE_SUBTRACT = 52;
+ const COMPOSITE_THRESHOLD = 53;
+ const COMPOSITE_XOR = 54;
+ const COMPOSITE_CHANGEMASK = 6;
+ const COMPOSITE_LINEARLIGHT = 34;
+ const COMPOSITE_DIVIDE = 55;
+ const COMPOSITE_DISTORT = 56;
+ const COMPOSITE_BLUR = 57;
+ const COMPOSITE_PEGTOPLIGHT = 58;
+ const COMPOSITE_VIVIDLIGHT = 59;
+ const COMPOSITE_PINLIGHT = 60;
+ const COMPOSITE_LINEARDODGE = 61;
+ const COMPOSITE_LINEARBURN = 62;
+ const COMPOSITE_MATHEMATICS = 63;
+ const COMPOSITE_MODULUSADD = 2;
+ const COMPOSITE_MODULUSSUBTRACT = 52;
+ const COMPOSITE_MINUSDST = 36;
+ const COMPOSITE_DIVIDEDST = 55;
+ const COMPOSITE_DIVIDESRC = 64;
+ const COMPOSITE_MINUSSRC = 65;
+ const COMPOSITE_DARKENINTENSITY = 66;
+ const COMPOSITE_LIGHTENINTENSITY = 67;
+ const MONTAGEMODE_FRAME = 1;
+ const MONTAGEMODE_UNFRAME = 2;
+ const MONTAGEMODE_CONCATENATE = 3;
+ const STYLE_NORMAL = 1;
+ const STYLE_ITALIC = 2;
+ const STYLE_OBLIQUE = 3;
+ const STYLE_ANY = 4;
+ const FILTER_UNDEFINED = 0;
+ const FILTER_POINT = 1;
+ const FILTER_BOX = 2;
+ const FILTER_TRIANGLE = 3;
+ const FILTER_HERMITE = 4;
+ const FILTER_HANNING = 5;
+ const FILTER_HAMMING = 6;
+ const FILTER_BLACKMAN = 7;
+ const FILTER_GAUSSIAN = 8;
+ const FILTER_QUADRATIC = 9;
+ const FILTER_CUBIC = 10;
+ const FILTER_CATROM = 11;
+ const FILTER_MITCHELL = 12;
+ const FILTER_LANCZOS = 22;
+ const FILTER_BESSEL = 13;
+ const FILTER_SINC = 14;
+ const FILTER_KAISER = 16;
+ const FILTER_WELSH = 17;
+ const FILTER_PARZEN = 18;
+ const FILTER_LAGRANGE = 21;
+ const FILTER_SENTINEL = 31;
+ const FILTER_BOHMAN = 19;
+ const FILTER_BARTLETT = 20;
+ const FILTER_JINC = 13;
+ const FILTER_SINCFAST = 15;
+ const FILTER_ROBIDOUX = 26;
+ const FILTER_LANCZOSSHARP = 23;
+ const FILTER_LANCZOS2 = 24;
+ const FILTER_LANCZOS2SHARP = 25;
+ const FILTER_ROBIDOUXSHARP = 27;
+ const FILTER_COSINE = 28;
+ const FILTER_SPLINE = 29;
+ const FILTER_LANCZOSRADIUS = 30;
+ const IMGTYPE_UNDEFINED = 0;
+ const IMGTYPE_BILEVEL = 1;
+ const IMGTYPE_GRAYSCALE = 2;
+ const IMGTYPE_GRAYSCALEMATTE = 3;
+ const IMGTYPE_PALETTE = 4;
+ const IMGTYPE_PALETTEMATTE = 5;
+ const IMGTYPE_TRUECOLOR = 6;
+ const IMGTYPE_TRUECOLORMATTE = 7;
+ const IMGTYPE_COLORSEPARATION = 8;
+ const IMGTYPE_COLORSEPARATIONMATTE = 9;
+ const IMGTYPE_OPTIMIZE = 10;
+ const IMGTYPE_PALETTEBILEVELMATTE = 11;
+ const RESOLUTION_UNDEFINED = 0;
+ const RESOLUTION_PIXELSPERINCH = 1;
+ const RESOLUTION_PIXELSPERCENTIMETER = 2;
+ const COMPRESSION_UNDEFINED = 0;
+ const COMPRESSION_NO = 1;
+ const COMPRESSION_BZIP = 2;
+ const COMPRESSION_FAX = 6;
+ const COMPRESSION_GROUP4 = 7;
+ const COMPRESSION_JPEG = 8;
+ const COMPRESSION_JPEG2000 = 9;
+ const COMPRESSION_LOSSLESSJPEG = 10;
+ const COMPRESSION_LZW = 11;
+ const COMPRESSION_RLE = 12;
+ const COMPRESSION_ZIP = 13;
+ const COMPRESSION_DXT1 = 3;
+ const COMPRESSION_DXT3 = 4;
+ const COMPRESSION_DXT5 = 5;
+ const COMPRESSION_ZIPS = 14;
+ const COMPRESSION_PIZ = 15;
+ const COMPRESSION_PXR24 = 16;
+ const COMPRESSION_B44 = 17;
+ const COMPRESSION_B44A = 18;
+ const COMPRESSION_LZMA = 19;
+ const COMPRESSION_JBIG1 = 20;
+ const COMPRESSION_JBIG2 = 21;
+ const PAINT_POINT = 1;
+ const PAINT_REPLACE = 2;
+ const PAINT_FLOODFILL = 3;
+ const PAINT_FILLTOBORDER = 4;
+ const PAINT_RESET = 5;
+ const GRAVITY_NORTHWEST = 1;
+ const GRAVITY_NORTH = 2;
+ const GRAVITY_NORTHEAST = 3;
+ const GRAVITY_WEST = 4;
+ const GRAVITY_CENTER = 5;
+ const GRAVITY_EAST = 6;
+ const GRAVITY_SOUTHWEST = 7;
+ const GRAVITY_SOUTH = 8;
+ const GRAVITY_SOUTHEAST = 9;
+ const GRAVITY_FORGET = 0;
+ const GRAVITY_STATIC = 10;
+ const STRETCH_NORMAL = 1;
+ const STRETCH_ULTRACONDENSED = 2;
+ const STRETCH_EXTRACONDENSED = 3;
+ const STRETCH_CONDENSED = 4;
+ const STRETCH_SEMICONDENSED = 5;
+ const STRETCH_SEMIEXPANDED = 6;
+ const STRETCH_EXPANDED = 7;
+ const STRETCH_EXTRAEXPANDED = 8;
+ const STRETCH_ULTRAEXPANDED = 9;
+ const STRETCH_ANY = 10;
+ const ALIGN_UNDEFINED = 0;
+ const ALIGN_LEFT = 1;
+ const ALIGN_CENTER = 2;
+ const ALIGN_RIGHT = 3;
+ const DECORATION_NO = 1;
+ const DECORATION_UNDERLINE = 2;
+ const DECORATION_OVERLINE = 3;
+ const DECORATION_LINETROUGH = 4;
+ const DECORATION_LINETHROUGH = 4;
+ const NOISE_UNIFORM = 1;
+ const NOISE_GAUSSIAN = 2;
+ const NOISE_MULTIPLICATIVEGAUSSIAN = 3;
+ const NOISE_IMPULSE = 4;
+ const NOISE_LAPLACIAN = 5;
+ const NOISE_POISSON = 6;
+ const NOISE_RANDOM = 7;
+ const CHANNEL_UNDEFINED = 0;
+ const CHANNEL_RED = 1;
+ const CHANNEL_GRAY = 1;
+ const CHANNEL_CYAN = 1;
+ const CHANNEL_GREEN = 2;
+ const CHANNEL_MAGENTA = 2;
+ const CHANNEL_BLUE = 4;
+ const CHANNEL_YELLOW = 4;
+ const CHANNEL_ALPHA = 8;
+ const CHANNEL_OPACITY = 8;
+ const CHANNEL_MATTE = 8;
+ const CHANNEL_BLACK = 32;
+ const CHANNEL_INDEX = 32;
+ const CHANNEL_ALL = 134217727;
+ const CHANNEL_DEFAULT = 134217719;
+ const CHANNEL_RGBA = 15;
+ const CHANNEL_TRUEALPHA = 64;
+ const CHANNEL_RGBS = 128;
+ const CHANNEL_GRAY_CHANNELS = 128;
+ const CHANNEL_SYNC = 256;
+ const CHANNEL_COMPOSITES = 47;
+ const METRIC_UNDEFINED = 0;
+ const METRIC_ABSOLUTEERRORMETRIC = 1;
+ const METRIC_MEANABSOLUTEERROR = 2;
+ const METRIC_MEANERRORPERPIXELMETRIC = 3;
+ const METRIC_MEANSQUAREERROR = 4;
+ const METRIC_PEAKABSOLUTEERROR = 5;
+ const METRIC_PEAKSIGNALTONOISERATIO = 6;
+ const METRIC_ROOTMEANSQUAREDERROR = 7;
+ const METRIC_NORMALIZEDCROSSCORRELATIONERRORMETRIC = 8;
+ const METRIC_FUZZERROR = 9;
+ const PIXEL_CHAR = 1;
+ const PIXEL_DOUBLE = 2;
+ const PIXEL_FLOAT = 3;
+ const PIXEL_INTEGER = 4;
+ const PIXEL_LONG = 5;
+ const PIXEL_QUANTUM = 6;
+ const PIXEL_SHORT = 7;
+ const EVALUATE_UNDEFINED = 0;
+ const EVALUATE_ADD = 1;
+ const EVALUATE_AND = 2;
+ const EVALUATE_DIVIDE = 3;
+ const EVALUATE_LEFTSHIFT = 4;
+ const EVALUATE_MAX = 5;
+ const EVALUATE_MIN = 6;
+ const EVALUATE_MULTIPLY = 7;
+ const EVALUATE_OR = 8;
+ const EVALUATE_RIGHTSHIFT = 9;
+ const EVALUATE_SET = 10;
+ const EVALUATE_SUBTRACT = 11;
+ const EVALUATE_XOR = 12;
+ const EVALUATE_POW = 13;
+ const EVALUATE_LOG = 14;
+ const EVALUATE_THRESHOLD = 15;
+ const EVALUATE_THRESHOLDBLACK = 16;
+ const EVALUATE_THRESHOLDWHITE = 17;
+ const EVALUATE_GAUSSIANNOISE = 18;
+ const EVALUATE_IMPULSENOISE = 19;
+ const EVALUATE_LAPLACIANNOISE = 20;
+ const EVALUATE_MULTIPLICATIVENOISE = 21;
+ const EVALUATE_POISSONNOISE = 22;
+ const EVALUATE_UNIFORMNOISE = 23;
+ const EVALUATE_COSINE = 24;
+ const EVALUATE_SINE = 25;
+ const EVALUATE_ADDMODULUS = 26;
+ const EVALUATE_MEAN = 27;
+ const EVALUATE_ABS = 28;
+ const EVALUATE_EXPONENTIAL = 29;
+ const EVALUATE_MEDIAN = 30;
+ const EVALUATE_SUM = 31;
+ const COLORSPACE_UNDEFINED = 0;
+ const COLORSPACE_RGB = 1;
+ const COLORSPACE_GRAY = 2;
+ const COLORSPACE_TRANSPARENT = 3;
+ const COLORSPACE_OHTA = 4;
+ const COLORSPACE_LAB = 5;
+ const COLORSPACE_XYZ = 6;
+ const COLORSPACE_YCBCR = 7;
+ const COLORSPACE_YCC = 8;
+ const COLORSPACE_YIQ = 9;
+ const COLORSPACE_YPBPR = 10;
+ const COLORSPACE_YUV = 11;
+ const COLORSPACE_CMYK = 12;
+ const COLORSPACE_SRGB = 13;
+ const COLORSPACE_HSB = 14;
+ const COLORSPACE_HSL = 15;
+ const COLORSPACE_HWB = 16;
+ const COLORSPACE_REC601LUMA = 17;
+ const COLORSPACE_REC709LUMA = 19;
+ const COLORSPACE_LOG = 21;
+ const COLORSPACE_CMY = 22;
+ const COLORSPACE_LUV = 23;
+ const COLORSPACE_HCL = 24;
+ const COLORSPACE_LCH = 25;
+ const COLORSPACE_LMS = 26;
+ const COLORSPACE_LCHAB = 27;
+ const COLORSPACE_LCHUV = 28;
+ const COLORSPACE_SCRGB = 29;
+ const COLORSPACE_HSI = 30;
+ const COLORSPACE_HSV = 31;
+ const COLORSPACE_HCLP = 32;
+ const COLORSPACE_YDBDR = 33;
+ const COLORSPACE_REC601YCBCR = 18;
+ const COLORSPACE_REC709YCBCR = 20;
+ const VIRTUALPIXELMETHOD_UNDEFINED = 0;
+ const VIRTUALPIXELMETHOD_BACKGROUND = 1;
+ const VIRTUALPIXELMETHOD_CONSTANT = 2;
+ const VIRTUALPIXELMETHOD_EDGE = 4;
+ const VIRTUALPIXELMETHOD_MIRROR = 5;
+ const VIRTUALPIXELMETHOD_TILE = 7;
+ const VIRTUALPIXELMETHOD_TRANSPARENT = 8;
+ const VIRTUALPIXELMETHOD_MASK = 9;
+ const VIRTUALPIXELMETHOD_BLACK = 10;
+ const VIRTUALPIXELMETHOD_GRAY = 11;
+ const VIRTUALPIXELMETHOD_WHITE = 12;
+ const VIRTUALPIXELMETHOD_HORIZONTALTILE = 13;
+ const VIRTUALPIXELMETHOD_VERTICALTILE = 14;
+ const VIRTUALPIXELMETHOD_HORIZONTALTILEEDGE = 15;
+ const VIRTUALPIXELMETHOD_VERTICALTILEEDGE = 16;
+ const VIRTUALPIXELMETHOD_CHECKERTILE = 17;
+ const PREVIEW_UNDEFINED = 0;
+ const PREVIEW_ROTATE = 1;
+ const PREVIEW_SHEAR = 2;
+ const PREVIEW_ROLL = 3;
+ const PREVIEW_HUE = 4;
+ const PREVIEW_SATURATION = 5;
+ const PREVIEW_BRIGHTNESS = 6;
+ const PREVIEW_GAMMA = 7;
+ const PREVIEW_SPIFF = 8;
+ const PREVIEW_DULL = 9;
+ const PREVIEW_GRAYSCALE = 10;
+ const PREVIEW_QUANTIZE = 11;
+ const PREVIEW_DESPECKLE = 12;
+ const PREVIEW_REDUCENOISE = 13;
+ const PREVIEW_ADDNOISE = 14;
+ const PREVIEW_SHARPEN = 15;
+ const PREVIEW_BLUR = 16;
+ const PREVIEW_THRESHOLD = 17;
+ const PREVIEW_EDGEDETECT = 18;
+ const PREVIEW_SPREAD = 19;
+ const PREVIEW_SOLARIZE = 20;
+ const PREVIEW_SHADE = 21;
+ const PREVIEW_RAISE = 22;
+ const PREVIEW_SEGMENT = 23;
+ const PREVIEW_SWIRL = 24;
+ const PREVIEW_IMPLODE = 25;
+ const PREVIEW_WAVE = 26;
+ const PREVIEW_OILPAINT = 27;
+ const PREVIEW_CHARCOALDRAWING = 28;
+ const PREVIEW_JPEG = 29;
+ const RENDERINGINTENT_UNDEFINED = 0;
+ const RENDERINGINTENT_SATURATION = 1;
+ const RENDERINGINTENT_PERCEPTUAL = 2;
+ const RENDERINGINTENT_ABSOLUTE = 3;
+ const RENDERINGINTENT_RELATIVE = 4;
+ const INTERLACE_UNDEFINED = 0;
+ const INTERLACE_NO = 1;
+ const INTERLACE_LINE = 2;
+ const INTERLACE_PLANE = 3;
+ const INTERLACE_PARTITION = 4;
+ const INTERLACE_GIF = 5;
+ const INTERLACE_JPEG = 6;
+ const INTERLACE_PNG = 7;
+ const FILLRULE_UNDEFINED = 0;
+ const FILLRULE_EVENODD = 1;
+ const FILLRULE_NONZERO = 2;
+ const PATHUNITS_UNDEFINED = 0;
+ const PATHUNITS_USERSPACE = 1;
+ const PATHUNITS_USERSPACEONUSE = 2;
+ const PATHUNITS_OBJECTBOUNDINGBOX = 3;
+ const LINECAP_UNDEFINED = 0;
+ const LINECAP_BUTT = 1;
+ const LINECAP_ROUND = 2;
+ const LINECAP_SQUARE = 3;
+ const LINEJOIN_UNDEFINED = 0;
+ const LINEJOIN_MITER = 1;
+ const LINEJOIN_ROUND = 2;
+ const LINEJOIN_BEVEL = 3;
+ const RESOURCETYPE_UNDEFINED = 0;
+ const RESOURCETYPE_AREA = 1;
+ const RESOURCETYPE_DISK = 2;
+ const RESOURCETYPE_FILE = 3;
+ const RESOURCETYPE_MAP = 4;
+ const RESOURCETYPE_MEMORY = 5;
+ const RESOURCETYPE_TIME = 7;
+ const RESOURCETYPE_THROTTLE = 8;
+ const RESOURCETYPE_THREAD = 6;
+ const DISPOSE_UNRECOGNIZED = 0;
+ const DISPOSE_UNDEFINED = 0;
+ const DISPOSE_NONE = 1;
+ const DISPOSE_BACKGROUND = 2;
+ const DISPOSE_PREVIOUS = 3;
+ const INTERPOLATE_UNDEFINED = 0;
+ const INTERPOLATE_AVERAGE = 1;
+ const INTERPOLATE_BICUBIC = 2;
+ const INTERPOLATE_BILINEAR = 3;
+ const INTERPOLATE_FILTER = 4;
+ const INTERPOLATE_INTEGER = 5;
+ const INTERPOLATE_MESH = 6;
+ const INTERPOLATE_NEARESTNEIGHBOR = 7;
+ const INTERPOLATE_SPLINE = 8;
+ const LAYERMETHOD_UNDEFINED = 0;
+ const LAYERMETHOD_COALESCE = 1;
+ const LAYERMETHOD_COMPAREANY = 2;
+ const LAYERMETHOD_COMPARECLEAR = 3;
+ const LAYERMETHOD_COMPAREOVERLAY = 4;
+ const LAYERMETHOD_DISPOSE = 5;
+ const LAYERMETHOD_OPTIMIZE = 6;
+ const LAYERMETHOD_OPTIMIZEPLUS = 8;
+ const LAYERMETHOD_OPTIMIZETRANS = 9;
+ const LAYERMETHOD_COMPOSITE = 12;
+ const LAYERMETHOD_OPTIMIZEIMAGE = 7;
+ const LAYERMETHOD_REMOVEDUPS = 10;
+ const LAYERMETHOD_REMOVEZERO = 11;
+ const LAYERMETHOD_TRIMBOUNDS = 16;
+ const ORIENTATION_UNDEFINED = 0;
+ const ORIENTATION_TOPLEFT = 1;
+ const ORIENTATION_TOPRIGHT = 2;
+ const ORIENTATION_BOTTOMRIGHT = 3;
+ const ORIENTATION_BOTTOMLEFT = 4;
+ const ORIENTATION_LEFTTOP = 5;
+ const ORIENTATION_RIGHTTOP = 6;
+ const ORIENTATION_RIGHTBOTTOM = 7;
+ const ORIENTATION_LEFTBOTTOM = 8;
+ const DISTORTION_UNDEFINED = 0;
+ const DISTORTION_AFFINE = 1;
+ const DISTORTION_AFFINEPROJECTION = 2;
+ const DISTORTION_ARC = 9;
+ const DISTORTION_BILINEAR = 6;
+ const DISTORTION_PERSPECTIVE = 4;
+ const DISTORTION_PERSPECTIVEPROJECTION = 5;
+ const DISTORTION_SCALEROTATETRANSLATE = 3;
+ const DISTORTION_POLYNOMIAL = 8;
+ const DISTORTION_POLAR = 10;
+ const DISTORTION_DEPOLAR = 11;
+ const DISTORTION_BARREL = 14;
+ const DISTORTION_SHEPARDS = 16;
+ const DISTORTION_SENTINEL = 18;
+ const DISTORTION_BARRELINVERSE = 15;
+ const DISTORTION_BILINEARFORWARD = 6;
+ const DISTORTION_BILINEARREVERSE = 7;
+ const DISTORTION_RESIZE = 17;
+ const DISTORTION_CYLINDER2PLANE = 12;
+ const DISTORTION_PLANE2CYLINDER = 13;
+ const LAYERMETHOD_MERGE = 13;
+ const LAYERMETHOD_FLATTEN = 14;
+ const LAYERMETHOD_MOSAIC = 15;
+ const ALPHACHANNEL_ACTIVATE = 1;
+ const ALPHACHANNEL_RESET = 7;
+ const ALPHACHANNEL_SET = 8;
+ const ALPHACHANNEL_UNDEFINED = 0;
+ const ALPHACHANNEL_COPY = 3;
+ const ALPHACHANNEL_DEACTIVATE = 4;
+ const ALPHACHANNEL_EXTRACT = 5;
+ const ALPHACHANNEL_OPAQUE = 6;
+ const ALPHACHANNEL_SHAPE = 9;
+ const ALPHACHANNEL_TRANSPARENT = 10;
+ const SPARSECOLORMETHOD_UNDEFINED = 0;
+ const SPARSECOLORMETHOD_BARYCENTRIC = 1;
+ const SPARSECOLORMETHOD_BILINEAR = 7;
+ const SPARSECOLORMETHOD_POLYNOMIAL = 8;
+ const SPARSECOLORMETHOD_SPEPARDS = 16;
+ const SPARSECOLORMETHOD_VORONOI = 18;
+ const SPARSECOLORMETHOD_INVERSE = 19;
+ const DITHERMETHOD_UNDEFINED = 0;
+ const DITHERMETHOD_NO = 1;
+ const DITHERMETHOD_RIEMERSMA = 2;
+ const DITHERMETHOD_FLOYDSTEINBERG = 3;
+ const FUNCTION_UNDEFINED = 0;
+ const FUNCTION_POLYNOMIAL = 1;
+ const FUNCTION_SINUSOID = 2;
+ const ALPHACHANNEL_BACKGROUND = 2;
+ const FUNCTION_ARCSIN = 3;
+ const FUNCTION_ARCTAN = 4;
+ const ALPHACHANNEL_FLATTEN = 11;
+ const ALPHACHANNEL_REMOVE = 12;
+ const STATISTIC_GRADIENT = 1;
+ const STATISTIC_MAXIMUM = 2;
+ const STATISTIC_MEAN = 3;
+ const STATISTIC_MEDIAN = 4;
+ const STATISTIC_MINIMUM = 5;
+ const STATISTIC_MODE = 6;
+ const STATISTIC_NONPEAK = 7;
+ const STATISTIC_STANDARD_DEVIATION = 8;
+ const MORPHOLOGY_CONVOLVE = 1;
+ const MORPHOLOGY_CORRELATE = 2;
+ const MORPHOLOGY_ERODE = 3;
+ const MORPHOLOGY_DILATE = 4;
+ const MORPHOLOGY_ERODE_INTENSITY = 5;
+ const MORPHOLOGY_DILATE_INTENSITY = 6;
+ const MORPHOLOGY_DISTANCE = 7;
+ const MORPHOLOGY_OPEN = 8;
+ const MORPHOLOGY_CLOSE = 9;
+ const MORPHOLOGY_OPEN_INTENSITY = 10;
+ const MORPHOLOGY_CLOSE_INTENSITY = 11;
+ const MORPHOLOGY_SMOOTH = 12;
+ const MORPHOLOGY_EDGE_IN = 13;
+ const MORPHOLOGY_EDGE_OUT = 14;
+ const MORPHOLOGY_EDGE = 15;
+ const MORPHOLOGY_TOP_HAT = 16;
+ const MORPHOLOGY_BOTTOM_HAT = 17;
+ const MORPHOLOGY_HIT_AND_MISS = 18;
+ const MORPHOLOGY_THINNING = 19;
+ const MORPHOLOGY_THICKEN = 20;
+ const MORPHOLOGY_VORONOI = 21;
+ const MORPHOLOGY_ITERATIVE = 22;
+ const KERNEL_UNITY = 1;
+ const KERNEL_GAUSSIAN = 2;
+ const KERNEL_DIFFERENCE_OF_GAUSSIANS = 3;
+ const KERNEL_LAPLACIAN_OF_GAUSSIANS = 4;
+ const KERNEL_BLUR = 5;
+ const KERNEL_COMET = 6;
+ const KERNEL_LAPLACIAN = 7;
+ const KERNEL_SOBEL = 8;
+ const KERNEL_FREI_CHEN = 9;
+ const KERNEL_ROBERTS = 10;
+ const KERNEL_PREWITT = 11;
+ const KERNEL_COMPASS = 12;
+ const KERNEL_KIRSCH = 13;
+ const KERNEL_DIAMOND = 14;
+ const KERNEL_SQUARE = 15;
+ const KERNEL_RECTANGLE = 16;
+ const KERNEL_OCTAGON = 17;
+ const KERNEL_DISK = 18;
+ const KERNEL_PLUS = 19;
+ const KERNEL_CROSS = 20;
+ const KERNEL_RING = 21;
+ const KERNEL_PEAKS = 22;
+ const KERNEL_EDGES = 23;
+ const KERNEL_CORNERS = 24;
+ const KERNEL_DIAGONALS = 25;
+ const KERNEL_LINE_ENDS = 26;
+ const KERNEL_LINE_JUNCTIONS = 27;
+ const KERNEL_RIDGES = 28;
+ const KERNEL_CONVEX_HULL = 29;
+ const KERNEL_THIN_SE = 30;
+ const KERNEL_SKELETON = 31;
+ const KERNEL_CHEBYSHEV = 32;
+ const KERNEL_MANHATTAN = 33;
+ const KERNEL_OCTAGONAL = 34;
+ const KERNEL_EUCLIDEAN = 35;
+ const KERNEL_USER_DEFINED = 36;
+ const KERNEL_BINOMIAL = 37;
+ const DIRECTION_LEFT_TO_RIGHT = 2;
+ const DIRECTION_RIGHT_TO_LEFT = 1;
+ const NORMALIZE_KERNEL_NONE = 0;
+ const NORMALIZE_KERNEL_VALUE = 8192;
+ const NORMALIZE_KERNEL_CORRELATE = 65536;
+ const NORMALIZE_KERNEL_PERCENT = 4096;
+
+ /**
+ * (PECL imagick 2.0.0)
+ * Removes repeated portions of images to optimize
+ * @link https://php.net/manual/en/imagick.optimizeimagelayers.php
+ * @return bool TRUE on success.
+ */
+ public function optimizeImageLayers () {}
+
+ /**
+ * (PECL imagick 2.0.0)
+ * Returns the maximum bounding region between images
+ * @link https://php.net/manual/en/imagick.compareimagelayers.php
+ * @param int $method
+ * By default target must match a particular pixel color exactly.
+ * However, in many cases two colors may differ by a small amount.
+ * The fuzz member of image defines how much tolerance is acceptable
+ * to consider two colors as the same. This parameter represents the variation
+ * on the quantum range.
+ *
+ * @return bool
+ * The radius of the Gaussian, in pixels, not counting the center pixel.
+ * Provide a value of 0 and the radius will be chosen automagically.
+ *
+ * @param float $sigma
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return bool
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Imagick::CHANNEL_ALL . Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * The radius of the Gaussian, in pixels, not counting the center pixel. Use 0 for auto-select.
+ *
+ * @param float $sigma
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return bool
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * A crop geometry string. This geometry defines a subregion of the image to crop.
+ *
+ * @param string $geometry
+ * An image geometry string. This geometry defines the final size of the image.
+ *
+ * @return Imagick
+ * The level of transparency: 1.0 is fully opaque and 0.0 is fully
+ * transparent.
+ *
+ * @return bool
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * The amount of fuzz. For example, set fuzz to 10 and the color red at
+ * intensities of 100 and 102 respectively are now interpreted as the
+ * same color for the purposes of the floodfill.
+ *
+ * @param mixed $bordercolor
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return bool
+ * The Channeltype
+ * constant. When not supplied, default channels are replaced.
+ *
+ * @return bool
+ * Whether to return only property names. If FALSE then also the values are returned
+ *
+ * @return array an array containing the image properties or property names.
+ */
+ public function getImageProperties ($pattern = "*", $only_names = true) {}
+
+ /**
+ * (PECL imagick 2.2.0)
+ * Whether to return only profile names. If FALSE then only profile names will be returned.
+ *
+ * @return array an array containing the image profiles or profile names.
+ */
+ public function getImageProfiles ($pattern = "*", $include_values = true) {}
+
+ /**
+ * (PECL imagick 2.0.1)
+ * The method of image distortion. See distortion constants
+ *
+ * @param array $arguments
+ * The page definition. For example 7168x5147+0+0
+ *
+ * @return bool
+ * The amount of fuzz. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.
+ *
+ * @param mixed $target
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return bool
+ * The amount of fuzz. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.
+ *
+ * @param bool $invert
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return bool
+ * The level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.
+ *
+ * @param float $fuzz
+ * The amount of fuzz. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.
+ *
+ * @param bool $invert
+ * How much the seam can traverse on x-axis.
+ * Passing 0 causes the seams to be straight.
+ *
+ * @param float $rigidity
+ * Introduces a bias for non-straight seams. This parameter is
+ * typically 0.
+ *
+ * @return bool
+ * The gravity property. Refer to the list of
+ * gravity constants.
+ *
+ * @return bool No value is returned.
+ */
+ public function setGravity ($gravity) {}
+
+ /**
+ * (No version information available, might only be in SVN)
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return array an array containing minima and maxima values of the channel(s).
+ */
+ public function getImageChannelRange ($channel) {}
+
+ /**
+ * (No version information available, might only be in SVN)
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return float a float describing the channel distortion.
+ */
+ public function getImageChannelDistortions (Imagick $reference, $metric, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (No version information available, might only be in SVN)
+ * The gravity property. Refer to the list of
+ * gravity constants.
+ *
+ * @return bool No value is returned.
+ */
+ public function setImageGravity ($gravity) {}
+
+ /**
+ * (No version information available, might only be in SVN)
+ * Map of pixel ordering as a string. This can be for example RGB.
+ * The value can be any combination or order of R = red, G = green, B = blue, A = alpha (0 is transparent),
+ * O = opacity (0 is opaque), C = cyan, Y = yellow, M = magenta, K = black, I = intensity (for grayscale), P = pad.
+ *
+ * @param int $storage
+ * The pixel storage method.
+ * Refer to this list of pixel constants.
+ *
+ * @param array $pixels
+ * A percentage describing minimum number of pixels
+ * contained in hexedra before it is considered valid.
+ *
+ * @param float $smooth_threshold
+ * An array containing the coordinates.
+ * The array is in format array(1,1, 2,45)
+ *
+ * @param int $channel [optional]
+ * @return bool
+ * Ordering of the exported pixels. For example "RGB".
+ * Valid characters for the map are R, G, B, A, O, C, Y, M, K, I and P.
+ *
+ * @param int $STORAGE
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return array an array with kurtosis and skewness
+ * members.
+ */
+ public function getImageChannelKurtosis ($channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (No version information available, might only be in SVN)
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return bool
+ * The path to an image to load or an array of paths. Paths can include
+ * wildcards for file names, or can be URLs.
+ *
+ * @throws ImagickException Throws ImagickException on error.
+ */
+ public function __construct ($files = null) {}
+
+ /**
+ * @return string
+ */
+ public function __toString () {}
+
+ public function count () {}
+
+ /**
+ * (PECL imagick 2.0.0)
+ * String presentation of the image format. Format support
+ * depends on the ImageMagick installation.
+ *
+ * @return bool
+ * Filename where to write the image. The extension of the filename
+ * defines the type of the file.
+ * Format can be forced regardless of file extension using format: prefix,
+ * for example "jpg:test.png".
+ *
+ * @return bool
+ * The Channeltype
+ * constant. When not supplied, all channels are blurred.
+ *
+ * @return bool
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this list of channel constants.
+ *
+ * @return bool
+ * The number of tiles per row and page (e.g. 6x4+0+0).
+ *
+ * @param string $thumbnail_geometry
+ * Preferred image size and border size of each thumbnail
+ * (e.g. 120x120+4+3>).
+ *
+ * @param int $mode
+ * Surround the image with an ornamental border (e.g. 15x15+3+3). The
+ * frame color is that of the thumbnail's matte color.
+ *
+ * @return Imagick
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * The amount of time expressed in 'ticks' that the image should be
+ * displayed for. For animated GIFs there are 100 ticks per second, so a
+ * value of 20 would be 20/100 of a second aka 1/5th of a second.
+ *
+ * @return bool
+ * The number of iterations the image should loop over. Set to '0' to loop
+ * continuously.
+ *
+ * @return bool
+ * The duration for which an image should be displayed expressed in ticks
+ * per second.
+ *
+ * @return bool
+ * Multiline parameter. If left empty it is autodetected
+ *
+ * @return array a multi-dimensional array representing the font metrics.
+ */
+ public function queryFontMetrics (ImagickDraw $properties, $text, $multiline = null) {}
+
+ /**
+ * (PECL imagick 2.0.0)
+ * The type of the noise. Refer to this list of
+ * noise constants.
+ *
+ * @param int $channel [optional]
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return bool
+ * The radius of the Gaussian, in pixels, not counting the center pixel.
+ *
+ * @param float $sigma
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * The channel argument affects only if Imagick is compiled against ImageMagick version
+ * 6.4.4 or greater.
+ *
+ * @return bool
+ * The amount of fuzz. For example, set fuzz to 10 and the color red at
+ * intensities of 100 and 102 respectively are now interpreted as the
+ * same color for the purposes of the floodfill.
+ *
+ * @param mixed $bordercolor
+ * ImagickPixel object or an float containing the opacity value.
+ * 1.0 is fully opaque and 0.0 is fully transparent.
+ *
+ * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
+ * @return bool
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @param int $metricType
+ * Provide a valid metric type constant. Refer to this
+ * list of metric constants.
+ *
+ * @return array Array consisting of an Imagick object of the
+ * reconstructed image and a float representing the difference.
+ * @throws ImagickException Throws ImagickException on error.
+ */
+ public function compareImages (Imagick $compare, $metric) {}
+
+ /**
+ * (PECL imagick 2.0.0)
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return Imagick
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return Imagick
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * The radius of the Gaussian, in pixels, not counting the center pixel.
+ *
+ * @param float $sigma
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT . Refer to this list of channel constants
+ *
+ * @return int
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @param int $metric
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return array
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return array
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * The level of transparency: 1.0 is fully opaque and 0.0 is fully
+ * transparent.
+ *
+ * @param float $fuzz
+ * The fuzz member of image defines how much tolerance is acceptable to
+ * consider two colors as the same.
+ *
+ * @param mixed $bordercolor
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * Change this target color to the fill color within the image. An
+ * ImagickPixel object or a string representing the target color.
+ *
+ * @param mixed $fill
+ * The fuzz member of image defines how much tolerance is acceptable to
+ * consider two colors as the same.
+ *
+ * @param int $channel [optional]
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ *
+ * @return bool
+ * Change this target color to specified opacity value within the image.
+ *
+ * @param float $alpha
+ * The level of transparency: 1.0 is fully opaque and 0.0 is fully
+ * transparent.
+ *
+ * @param float $fuzz
+ * The fuzz member of image defines how much tolerance is acceptable to
+ * consider two colors as the same.
+ *
+ * @return bool
+ * Preview type. See Preview type constants
+ *
+ * @return bool
+ * Image format. This parameter was added in Imagick version 2.0.1.
+ *
+ * @return bool
+ * The resource limit. The unit depends on the type of the resource being limited.
+ *
+ * @return bool
+ * multidimensional array like array( array( 'x' => 3, 'y' => 4 ), array( 'x' => 2, 'y' => 6 ) );
+ *
+ * @return bool
+ * Multidimensional array like array( array( 'x' => 1, 'y' => 2 ),
+ * array( 'x' => 3, 'y' => 4 ) )
+ *
+ * @return bool No value is returned.
+ */
+ public function bezier (array $coordinates) {}
+
+ /**
+ * (PECL imagick 2.0.0)
+ * composition operator. One of COMPOSITE_ constants
+ *
+ * @param float $x
+ * array of x and y coordinates: array( array( 'x' => 4, 'y' => 6 ), array( 'x' => 8, 'y' => 10 ) )
+ *
+ * @return bool
+ * stroke opacity. 1.0 is fully opaque
+ *
+ * @return bool No value is returned.
+ */
+ public function setStrokeOpacity ($stroke_opacity) {}
+
+ /**
+ * (PECL imagick 2.0.0)
+ * The normalized value for hue, described as a fractional arc
+ * (between 0 and 1) of the hue circle, where the zero value is
+ * red.
+ *
+ * @param float $saturation
+ * The normalized value for luminosity, on a scale from black at
+ * 0 to white at 1, with the full HS value at 0.5 luminosity.
+ *
+ * @return bool
+ * The optional color string to use as the initial value of this object.
+ *
+ */
+ public function __construct ($color = null) {}
+
+ /**
+ * (PECL imagick 2.0.0)
+ * The color definition to use in order to initialise the
+ * ImagickPixel object.
+ *
+ * @return bool
+ * One of the Imagick color constants e.g. \Imagick::COLOR_GREEN or \Imagick::COLOR_ALPHA.
+ *
+ * @param float $value
+ * The color to get the value of, specified as one of the Imagick color
+ * constants. This can be one of the RGB colors, CMYK colors, alpha and
+ * opacity e.g (Imagick::COLOR_BLUE, Imagick::COLOR_MAGENTA).
+ *
+ * @return float The value of the channel, as a normalized floating-point number, throwing
+ * ImagickPixelException on error.
+ * @throws ImagickPixelException on error
+ */
+ public function getColorValue ($color) {}
+
+ /**
+ * (PECL imagick 2.0.0)
+ * The maximum distance within which to consider these colors as similar.
+ * The theoretical maximum for this value is the square root of three
+ * (1.732).
+ *
+ * @return bool
+ * The maximum distance within which to consider these colors as similar.
+ * The theoretical maximum for this value is the square root of three
+ * (1.732).
+ *
+ * @return bool
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 000000000..98764e2ba
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,13 @@
+Copyright 2007 ZXing authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..6d7669861
--- /dev/null
+++ b/README.md
@@ -0,0 +1,109 @@
+# chillerlan/php-qrcode
+
+A PHP 7.4+ QR Code library based on the [implementation](https://github.com/kazuhikoarase/qrcode-generator) by [Kazuhiko Arase](https://github.com/kazuhikoarase),
+namespaced, cleaned up, improved and other stuff.
+
+[![PHP Version Support][php-badge]][php]
+[![Packagist version][packagist-badge]][packagist]
+[![License][license-badge]][license]
+[![CodeCov][coverage-badge]][coverage]
+[![Scrunitizer CI][scrutinizer-badge]][scrutinizer]
+[![Packagist downloads][downloads-badge]][downloads]
+[![Continuous Integration][gh-action-badge]][gh-action]
+[![phpDocs][gh-docs-badge]][gh-docs]
+
+[php-badge]: https://img.shields.io/packagist/php-v/chillerlan/php-qrcode?logo=php&color=8892BF
+[php]: https://www.php.net/supported-versions.php
+[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-qrcode.svg?logo=packagist
+[packagist]: https://packagist.org/packages/chillerlan/php-qrcode
+[license-badge]: https://img.shields.io/github/license/chillerlan/php-qrcode.svg
+[license]: https://github.com/chillerlan/php-qrcode/blob/main/LICENSE
+[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-qrcode.svg?logo=codecov
+[coverage]: https://codecov.io/github/chillerlan/php-qrcode
+[scrutinizer-badge]: https://img.shields.io/scrutinizer/g/chillerlan/php-qrcode.svg?logo=scrutinizer
+[scrutinizer]: https://scrutinizer-ci.com/g/chillerlan/php-qrcode
+[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-qrcode.svg?logo=packagist
+[downloads]: https://packagist.org/packages/chillerlan/php-qrcode/stats
+[gh-action-badge]: https://github.com/chillerlan/php-qrcode/workflows/Continuous%20Integration/badge.svg
+[gh-action]: https://github.com/chillerlan/php-qrcode/actions?query=workflow%3A%22Continuous+Integration%22
+[gh-docs-badge]: https://github.com/chillerlan/php-qrcode/workflows/Docs/badge.svg
+[gh-docs]: https://github.com/chillerlan/php-qrcode/actions?query=workflow%3ADocs
+
+## Documentation
+
+See [the wiki](https://github.com/chillerlan/php-qrcode/wiki) for advanced documentation.
+An API documentation created with [phpDocumentor](https://www.phpdoc.org/) can be found at https://chillerlan.github.io/php-qrcode/ (WIP).
+
+### Requirements
+- PHP 7.4+
+ - `ext-mbstring`
+ - optional:
+ - `ext-json`, `ext-gd`
+ - `ext-imagick` with [ImageMagick](https://imagemagick.org) installed
+ - [`setasign/fpdf`](https://github.com/setasign/fpdf) for the PDF output module
+
+### Installation
+**requires [composer](https://getcomposer.org)**
+
+via terminal: `composer require chillerlan/php-qrcode`
+
+*composer.json*
+```json
+{
+ "require": {
+ "php": "^7.4",
+ "chillerlan/php-qrcode": "dev-main"
+ }
+}
+```
+
+Note: replace `dev-main` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^3.2` - see [releases](https://github.com/chillerlan/php-qrcode/releases) for valid versions.
+For PHP version ...
+ - 7.4+ use `^4.3`
+ - 7.2+ use `^3.4.1` (PHP 7.2 is EOL and 7.3 soon! v3.4.1 also supports PHP8 - however, it's no longer supported)
+ - 7.0+ use `^2.0` (PHP 7.0 and 7.1 are EOL!)
+ - 5.6+ use `^1.0` (please let PHP 5 die!)
+
+### Quickstart
+We want to encode this URI for a mobile authenticator into a QRcode image:
+```php
+$data = 'otpauth://totp/test?secret=B3JX4VCVJDVNXNZ5&issuer=chillerlan.net';
+
+// quick and simple:
+echo ' ';
+```
+
+
+
+
+
+
+Wait, what was that? Please again, slower! See [Advanced usage](https://github.com/chillerlan/php-qrcode/wiki/Advanced-usage) on the wiki.
+
+### Framework Integration
+- Drupal [Google Authenticator Login `ga_login`](https://www.drupal.org/project/ga_login)
+- WordPress [`wp-two-factor-auth`](https://github.com/sjinks/wp-two-factor-auth)
+- WordPress [Simple 2FA `simple-2fa`](https://wordpress.org/plugins/simple-2fa/)
+- WoltLab Suite [two-step-verification](http://pluginstore.woltlab.com/file/3007-two-step-verification/)
+- [Cachet](https://github.com/CachetHQ/Cachet)
+- [Appwrite](https://github.com/appwrite/appwrite)
+- [twill](https://github.com/area17/twill)
+- other uses: [dependents](https://github.com/chillerlan/php-qrcode/network/dependents) / [packages](https://github.com/chillerlan/php-qrcode/network/dependents?dependent_type=PACKAGE)
+
+### Shameless advertising
+Hi, please check out my other projects that are way cooler than qrcodes!
+
+- [php-oauth-core](https://github.com/chillerlan/php-oauth-core) - an OAuth 1/2 client library along with a bunch of [providers](https://github.com/chillerlan/php-oauth-providers)
+- [php-httpinterface](https://github.com/chillerlan/php-httpinterface) - a PSR-7/15/17/18 implemetation
+- [php-database](https://github.com/chillerlan/php-database) - a database client & querybuilder for MySQL, Postgres, SQLite, MSSQL, Firebird
+
+### Disclaimer!
+I don't take responsibility for molten CPUs, misled applications, failed log-ins etc.. Use at your own risk!
+
+#### License notice
+Parts of this code are [ported to php](https://github.com/khanamiryan/php-qrcode-detector-decoder) from the [ZXing project](https://github.com/zxing/zxing) and licensed under the Apache License, Version 2.0.
+
+#### Trademark Notice
+
+The word "QR Code" is registered trademark of *DENSO WAVE INCORPORATED*
+http://www.denso-wave.com/qrcode/faqpatent-e.html
diff --git a/Readme.md b/Readme.md
deleted file mode 100644
index 148d036e3..000000000
--- a/Readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Auto generated API documentation
-
-The API documentation can be auto generated with [phpDocumentor](https://www.phpdoc.org/).
-There is an [online version available](https://chillerlan.github.io/php-qrcode/) via the [gh-pages branch](https://github.com/chillerlan/php-qrcode/tree/gh-pages) that is [automatically deployed](https://github.com/chillerlan/php-qrcode/deployments) on each push to main.
-
-Locally created docs will appear in this directory. If you'd like to create local docs, please follow these steps:
-
-- [download phpDocumentor](https://github.com/phpDocumentor/phpDocumentor/releases) v3+ as .phar archive
-- run it in the repository root directory:
- - on Windows `c:\path\to\php.exe c:\path\to\phpDocumentor.phar --config=phpdoc.xml`
- - on Linux just `php /path/to/phpDocumentor.phar --config=phpdoc.xml`
-- open [index.html](./index.html) in a browser
-- profit!
diff --git a/classes/chillerlan-QRCode-Data-AlphaNum.html b/classes/chillerlan-QRCode-Data-AlphaNum.html
deleted file mode 100644
index 6aba9cdc5..000000000
--- a/classes/chillerlan-QRCode-Data-AlphaNum.html
+++ /dev/null
@@ -1,1155 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AlphaNum
-
-
- extends QRDataAbstract
-
-
-
-
-
-
-
-
- Alphanumeric mode: 0 to 9, A to Z, space, $ % * + - . / :
-
- ISO/IEC 18004:2000 Section 8.3.3
-ISO/IEC 18004:2000 Section 8.4.3
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $bitBuffer
-
- : BitBuffer
-
-a BitBuffer instance
-
-
- $datamode
-
- : int
-
-the current data mode: Num, Alphanum, Kanji, Byte
-
-
- $dcdata
-
- : array<string|int, mixed>
-
-ECC temp data
-
-
- $ecdata
-
- : array<string|int, mixed>
-
-ECC temp data
-
-
- $lengthBits
-
- : array<string|int, mixed>
-
-mode length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- $options
-
- : SettingsContainerInterface
-
-the options instance
-
-
- $strlen
-
- : int|null
-
-the string byte count
-
-
- $version
-
- : int
-
-current QR Code version
-
-
- __construct()
-
- : mixed
-
-QRDataInterface constructor.
-
-
- initMatrix()
-
- : QRMatrix
-
-returns a fresh matrix object with the data written for the given $maskPattern
-
-
- setData()
-
- : QRDataInterface
-
-Sets the data string (internally called by the constructor)
-
-
- getCharCode()
-
- : int
-
-get the code for the given character
-
-
- getLength()
-
- : int
-
-returns the byte count of the $data string
-
-
- getLengthBits()
-
- : int
-
-returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- getMinimumVersion()
-
- : int
-
-returns the minimum version number for the given string
-
-
- maskECC()
-
- : array<string|int, mixed>
-
-ECC masking
-
-
- poly()
-
- : array<string|int, mixed>
-
-helper method for the polynomial operations
-
-
- write()
-
- : void
-
-writes the actual data string to the BitBuffer
-
-
- writeBitBuffer()
-
- : void
-
-creates a BitBuffer and writes the string data to it
-
-
-
-
-
-
-
-
-
-
-
-
- $bitBuffer
-
-
-
-
-
-
- a BitBuffer instance
-
-
- protected
- BitBuffer
- $bitBuffer
-
-
-
-
-
-
-
-
-
- $datamode
-
-
-
-
-
-
- the current data mode: Num, Alphanum, Kanji, Byte
-
-
- protected
- int
- $datamode
- = chillerlanQRCodeQRCode::DATA_ALPHANUM
-
-
-
-
-
-
-
-
- $dcdata
-
-
-
-
-
-
- ECC temp data
-
-
- protected
- array<string|int, mixed>
- $dcdata
-
-
-
-
-
-
-
-
-
- $ecdata
-
-
-
-
-
-
- ECC temp data
-
-
- protected
- array<string|int, mixed>
- $ecdata
-
-
-
-
-
-
-
-
-
- $lengthBits
-
-
-
-
-
-
- mode length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- protected
- array<string|int, mixed>
- $lengthBits
- = [9, 11, 13]
-
- ISO/IEC 18004:2000 Table 3 - Number of bits in Character Count Indicator
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
- the options instance
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $strlen
-
-
-
-
-
-
- the string byte count
-
-
- protected
- int|null
- $strlen
- = null
-
-
-
-
-
-
-
-
- $version
-
-
-
-
-
-
- current QR Code version
-
-
- protected
- int
- $version
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QRDataInterface constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options [ , string $data = null ] ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $data
- : string
- = null
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- initMatrix()
-
-
-
-
- returns a fresh matrix object with the data written for the given $maskPattern
-
-
- public
- initMatrix ( int $maskPattern [ , bool $test = null ] ) : QRMatrix
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
- $test
- : bool
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setData()
-
-
-
-
- Sets the data string (internally called by the constructor)
-
-
- public
- setData ( string $data ) : QRDataInterface
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- QRDataInterface
- —
-
-
-
-
-
-
- getCharCode()
-
-
-
-
- get the code for the given character
-
-
- protected
- getCharCode ( string $chr ) : int
-
-
-
- Parameters
-
-
- $chr
- : string
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
- on an illegal character occurence
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getLength()
-
-
-
-
- returns the byte count of the $data string
-
-
- protected
- getLength ( string $data ) : int
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getLengthBits()
-
-
-
-
- returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- protected
- getLengthBits ( ) : int
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
- codeCoverageIgnore
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getMinimumVersion()
-
-
-
-
- returns the minimum version number for the given string
-
-
- protected
- getMinimumVersion ( ) : int
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- maskECC()
-
-
-
-
- ECC masking
-
-
- protected
- maskECC ( ) : array<string|int, mixed>
-
- ISO/IEC 18004:2000 Section 8.5 ff
-
-
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/error-correction-coding
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- poly()
-
-
-
-
- helper method for the polynomial operations
-
-
- protected
- poly ( int $key , int $count ) : array<string|int, mixed>
-
-
-
- Parameters
-
-
- $key
- : int
-
-
-
-
-
- $count
- : int
-
-
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- write()
-
-
-
-
- writes the actual data string to the BitBuffer
-
-
- protected
- write ( string $data ) : void
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- inheritdoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- writeBitBuffer()
-
-
-
-
- creates a BitBuffer and writes the string data to it
-
-
- protected
- writeBitBuffer ( string $data ) : void
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Data-Byte.html b/classes/chillerlan-QRCode-Data-Byte.html
deleted file mode 100644
index 0b29cae20..000000000
--- a/classes/chillerlan-QRCode-Data-Byte.html
+++ /dev/null
@@ -1,1088 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Byte
-
-
- extends QRDataAbstract
-
-
-
-
-
-
-
-
- Byte mode, ISO-8859-1 or UTF-8
-
- ISO/IEC 18004:2000 Section 8.3.4
-ISO/IEC 18004:2000 Section 8.4.4
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $bitBuffer
-
- : BitBuffer
-
-a BitBuffer instance
-
-
- $datamode
-
- : int
-
-the current data mode: Num, Alphanum, Kanji, Byte
-
-
- $dcdata
-
- : array<string|int, mixed>
-
-ECC temp data
-
-
- $ecdata
-
- : array<string|int, mixed>
-
-ECC temp data
-
-
- $lengthBits
-
- : array<string|int, mixed>
-
-mode length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- $options
-
- : SettingsContainerInterface
-
-the options instance
-
-
- $strlen
-
- : int|null
-
-the string byte count
-
-
- $version
-
- : int
-
-current QR Code version
-
-
- __construct()
-
- : mixed
-
-QRDataInterface constructor.
-
-
- initMatrix()
-
- : QRMatrix
-
-returns a fresh matrix object with the data written for the given $maskPattern
-
-
- setData()
-
- : QRDataInterface
-
-Sets the data string (internally called by the constructor)
-
-
- getLength()
-
- : int
-
-returns the byte count of the $data string
-
-
- getLengthBits()
-
- : int
-
-returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- getMinimumVersion()
-
- : int
-
-returns the minimum version number for the given string
-
-
- maskECC()
-
- : array<string|int, mixed>
-
-ECC masking
-
-
- poly()
-
- : array<string|int, mixed>
-
-helper method for the polynomial operations
-
-
- write()
-
- : void
-
-writes the actual data string to the BitBuffer
-
-
- writeBitBuffer()
-
- : void
-
-creates a BitBuffer and writes the string data to it
-
-
-
-
-
-
-
-
-
-
-
-
- $bitBuffer
-
-
-
-
-
-
- a BitBuffer instance
-
-
- protected
- BitBuffer
- $bitBuffer
-
-
-
-
-
-
-
-
-
- $datamode
-
-
-
-
-
-
- the current data mode: Num, Alphanum, Kanji, Byte
-
-
- protected
- int
- $datamode
- = chillerlanQRCodeQRCode::DATA_BYTE
-
-
-
-
-
-
-
-
- $dcdata
-
-
-
-
-
-
- ECC temp data
-
-
- protected
- array<string|int, mixed>
- $dcdata
-
-
-
-
-
-
-
-
-
- $ecdata
-
-
-
-
-
-
- ECC temp data
-
-
- protected
- array<string|int, mixed>
- $ecdata
-
-
-
-
-
-
-
-
-
- $lengthBits
-
-
-
-
-
-
- mode length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- protected
- array<string|int, mixed>
- $lengthBits
- = [8, 16, 16]
-
- ISO/IEC 18004:2000 Table 3 - Number of bits in Character Count Indicator
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
- the options instance
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $strlen
-
-
-
-
-
-
- the string byte count
-
-
- protected
- int|null
- $strlen
- = null
-
-
-
-
-
-
-
-
- $version
-
-
-
-
-
-
- current QR Code version
-
-
- protected
- int
- $version
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QRDataInterface constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options [ , string $data = null ] ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $data
- : string
- = null
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- initMatrix()
-
-
-
-
- returns a fresh matrix object with the data written for the given $maskPattern
-
-
- public
- initMatrix ( int $maskPattern [ , bool $test = null ] ) : QRMatrix
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
- $test
- : bool
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setData()
-
-
-
-
- Sets the data string (internally called by the constructor)
-
-
- public
- setData ( string $data ) : QRDataInterface
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- QRDataInterface
- —
-
-
-
-
-
-
- getLength()
-
-
-
-
- returns the byte count of the $data string
-
-
- protected
- getLength ( string $data ) : int
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getLengthBits()
-
-
-
-
- returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- protected
- getLengthBits ( ) : int
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
- codeCoverageIgnore
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getMinimumVersion()
-
-
-
-
- returns the minimum version number for the given string
-
-
- protected
- getMinimumVersion ( ) : int
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- maskECC()
-
-
-
-
- ECC masking
-
-
- protected
- maskECC ( ) : array<string|int, mixed>
-
- ISO/IEC 18004:2000 Section 8.5 ff
-
-
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/error-correction-coding
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- poly()
-
-
-
-
- helper method for the polynomial operations
-
-
- protected
- poly ( int $key , int $count ) : array<string|int, mixed>
-
-
-
- Parameters
-
-
- $key
- : int
-
-
-
-
-
- $count
- : int
-
-
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- write()
-
-
-
-
- writes the actual data string to the BitBuffer
-
-
- protected
- write ( string $data ) : void
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- inheritdoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- writeBitBuffer()
-
-
-
-
- creates a BitBuffer and writes the string data to it
-
-
- protected
- writeBitBuffer ( string $data ) : void
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Data-Kanji.html b/classes/chillerlan-QRCode-Data-Kanji.html
deleted file mode 100644
index be4badfc9..000000000
--- a/classes/chillerlan-QRCode-Data-Kanji.html
+++ /dev/null
@@ -1,1112 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kanji
-
-
- extends QRDataAbstract
-
-
-
-
-
-
-
-
- Kanji mode: double-byte characters from the Shift JIS character set
-
- ISO/IEC 18004:2000 Section 8.3.5
-ISO/IEC 18004:2000 Section 8.4.5
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $bitBuffer
-
- : BitBuffer
-
-a BitBuffer instance
-
-
- $datamode
-
- : int
-
-the current data mode: Num, Alphanum, Kanji, Byte
-
-
- $dcdata
-
- : array<string|int, mixed>
-
-ECC temp data
-
-
- $ecdata
-
- : array<string|int, mixed>
-
-ECC temp data
-
-
- $lengthBits
-
- : array<string|int, mixed>
-
-mode length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- $options
-
- : SettingsContainerInterface
-
-the options instance
-
-
- $strlen
-
- : int|null
-
-the string byte count
-
-
- $version
-
- : int
-
-current QR Code version
-
-
- __construct()
-
- : mixed
-
-QRDataInterface constructor.
-
-
- initMatrix()
-
- : QRMatrix
-
-returns a fresh matrix object with the data written for the given $maskPattern
-
-
- setData()
-
- : QRDataInterface
-
-Sets the data string (internally called by the constructor)
-
-
- getLength()
-
- : int
-
-returns the byte count of the $data string
-
-
- getLengthBits()
-
- : int
-
-returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- getMinimumVersion()
-
- : int
-
-returns the minimum version number for the given string
-
-
- maskECC()
-
- : array<string|int, mixed>
-
-ECC masking
-
-
- poly()
-
- : array<string|int, mixed>
-
-helper method for the polynomial operations
-
-
- write()
-
- : void
-
-writes the actual data string to the BitBuffer
-
-
- writeBitBuffer()
-
- : void
-
-creates a BitBuffer and writes the string data to it
-
-
-
-
-
-
-
-
-
-
-
-
- $bitBuffer
-
-
-
-
-
-
- a BitBuffer instance
-
-
- protected
- BitBuffer
- $bitBuffer
-
-
-
-
-
-
-
-
-
- $datamode
-
-
-
-
-
-
- the current data mode: Num, Alphanum, Kanji, Byte
-
-
- protected
- int
- $datamode
- = chillerlanQRCodeQRCode::DATA_KANJI
-
-
-
-
-
-
-
-
- $dcdata
-
-
-
-
-
-
- ECC temp data
-
-
- protected
- array<string|int, mixed>
- $dcdata
-
-
-
-
-
-
-
-
-
- $ecdata
-
-
-
-
-
-
- ECC temp data
-
-
- protected
- array<string|int, mixed>
- $ecdata
-
-
-
-
-
-
-
-
-
- $lengthBits
-
-
-
-
-
-
- mode length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- protected
- array<string|int, mixed>
- $lengthBits
- = [8, 10, 12]
-
- ISO/IEC 18004:2000 Table 3 - Number of bits in Character Count Indicator
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
- the options instance
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $strlen
-
-
-
-
-
-
- the string byte count
-
-
- protected
- int|null
- $strlen
- = null
-
-
-
-
-
-
-
-
- $version
-
-
-
-
-
-
- current QR Code version
-
-
- protected
- int
- $version
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QRDataInterface constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options [ , string $data = null ] ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $data
- : string
- = null
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- initMatrix()
-
-
-
-
- returns a fresh matrix object with the data written for the given $maskPattern
-
-
- public
- initMatrix ( int $maskPattern [ , bool $test = null ] ) : QRMatrix
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
- $test
- : bool
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setData()
-
-
-
-
- Sets the data string (internally called by the constructor)
-
-
- public
- setData ( string $data ) : QRDataInterface
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- QRDataInterface
- —
-
-
-
-
-
-
- getLength()
-
-
-
-
- returns the byte count of the $data string
-
-
- protected
- getLength ( string $data ) : int
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- inheritdoc
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getLengthBits()
-
-
-
-
- returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- protected
- getLengthBits ( ) : int
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
- codeCoverageIgnore
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getMinimumVersion()
-
-
-
-
- returns the minimum version number for the given string
-
-
- protected
- getMinimumVersion ( ) : int
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- maskECC()
-
-
-
-
- ECC masking
-
-
- protected
- maskECC ( ) : array<string|int, mixed>
-
- ISO/IEC 18004:2000 Section 8.5 ff
-
-
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/error-correction-coding
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- poly()
-
-
-
-
- helper method for the polynomial operations
-
-
- protected
- poly ( int $key , int $count ) : array<string|int, mixed>
-
-
-
- Parameters
-
-
- $key
- : int
-
-
-
-
-
- $count
- : int
-
-
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- write()
-
-
-
-
- writes the actual data string to the BitBuffer
-
-
- protected
- write ( string $data ) : void
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- inheritdoc
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
- on an illegal character occurence
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- writeBitBuffer()
-
-
-
-
- creates a BitBuffer and writes the string data to it
-
-
- protected
- writeBitBuffer ( string $data ) : void
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Data-MaskPatternTester.html b/classes/chillerlan-QRCode-Data-MaskPatternTester.html
deleted file mode 100644
index 2f80b6d89..000000000
--- a/classes/chillerlan-QRCode-Data-MaskPatternTester.html
+++ /dev/null
@@ -1,650 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MaskPatternTester
-
-
-
-
-
-
-
-
- Receives a QRDataInterface object and runs the mask pattern tests on it.
-
- ISO/IEC 18004:2000 Section 8.8.2 - Evaluation of masking results
-
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/data-masking
-
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $dataInterface
-
- : QRDataInterface
-
-The data interface that contains the data matrix to test
-
-
- __construct()
-
- : mixed
-
-Receives the QRDataInterface
-
-
- getBestMaskPattern()
-
- : int
-
-shoves a QRMatrix through the MaskPatternTester to find the lowest penalty mask pattern
-
-
- testPattern()
-
- : int
-
-Returns the penalty for the given mask pattern
-
-
- testLevel1()
-
- : int
-
-Checks for each group of five or more same-colored modules in a row (or column)
-
-
- testLevel2()
-
- : int
-
-Checks for each 2x2 area of same-colored modules in the matrix
-
-
- testLevel3()
-
- : int
-
-Checks if there are patterns that look similar to the finder patterns (1:1:3:1:1 ratio)
-
-
- testLevel4()
-
- : float
-
-Checks if more than half of the modules are dark or light, with a larger penalty for a larger difference
-
-
-
-
-
-
-
-
-
-
-
-
- $dataInterface
-
-
-
-
-
-
- The data interface that contains the data matrix to test
-
-
- protected
- QRDataInterface
- $dataInterface
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- Receives the QRDataInterface
-
-
- public
- __construct ( QRDataInterface $dataInterface ) : mixed
-
-
-
- Parameters
-
-
- $dataInterface
- : QRDataInterface
-
-
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$maskPattern
-
-
-
-
-
- see
-
-
- QRMatrix::$maskPattern
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- getBestMaskPattern()
-
-
-
-
- shoves a QRMatrix through the MaskPatternTester to find the lowest penalty mask pattern
-
-
- public
- getBestMaskPattern ( ) : int
-
-
-
-
-
-
-
-
- see
-
-
- MaskPatternTester
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- testPattern()
-
-
-
-
- Returns the penalty for the given mask pattern
-
-
- public
- testPattern ( int $pattern ) : int
-
-
-
- Parameters
-
-
- $pattern
- : int
-
-
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$maskPattern
-
-
-
-
-
- see
-
-
- QRMatrix::$maskPattern
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- testLevel1()
-
-
-
-
- Checks for each group of five or more same-colored modules in a row (or column)
-
-
- protected
- testLevel1 ( array<string|int, mixed> $m , int $size ) : int
-
-
-
- Parameters
-
-
- $m
- : array<string|int, mixed>
-
-
-
-
-
- $size
- : int
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- testLevel2()
-
-
-
-
- Checks for each 2x2 area of same-colored modules in the matrix
-
-
- protected
- testLevel2 ( array<string|int, mixed> $m , int $size ) : int
-
-
-
- Parameters
-
-
- $m
- : array<string|int, mixed>
-
-
-
-
-
- $size
- : int
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- testLevel3()
-
-
-
-
- Checks if there are patterns that look similar to the finder patterns (1:1:3:1:1 ratio)
-
-
- protected
- testLevel3 ( array<string|int, mixed> $m , int $size ) : int
-
-
-
- Parameters
-
-
- $m
- : array<string|int, mixed>
-
-
-
-
-
- $size
- : int
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- testLevel4()
-
-
-
-
- Checks if more than half of the modules are dark or light, with a larger penalty for a larger difference
-
-
- protected
- testLevel4 ( array<string|int, mixed> $m , int $size ) : float
-
-
-
- Parameters
-
-
- $m
- : array<string|int, mixed>
-
-
-
-
-
- $size
- : int
-
-
-
-
-
-
-
-
- Return values
- float
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Data-Number.html b/classes/chillerlan-QRCode-Data-Number.html
deleted file mode 100644
index 51e624a1d..000000000
--- a/classes/chillerlan-QRCode-Data-Number.html
+++ /dev/null
@@ -1,1155 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Number
-
-
- extends QRDataAbstract
-
-
-
-
-
-
-
-
- Numeric mode: decimal digits 0 to 9
-
- ISO/IEC 18004:2000 Section 8.3.2
-ISO/IEC 18004:2000 Section 8.4.2
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $bitBuffer
-
- : BitBuffer
-
-a BitBuffer instance
-
-
- $datamode
-
- : int
-
-the current data mode: Num, Alphanum, Kanji, Byte
-
-
- $dcdata
-
- : array<string|int, mixed>
-
-ECC temp data
-
-
- $ecdata
-
- : array<string|int, mixed>
-
-ECC temp data
-
-
- $lengthBits
-
- : array<string|int, mixed>
-
-mode length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- $options
-
- : SettingsContainerInterface
-
-the options instance
-
-
- $strlen
-
- : int|null
-
-the string byte count
-
-
- $version
-
- : int
-
-current QR Code version
-
-
- __construct()
-
- : mixed
-
-QRDataInterface constructor.
-
-
- initMatrix()
-
- : QRMatrix
-
-returns a fresh matrix object with the data written for the given $maskPattern
-
-
- setData()
-
- : QRDataInterface
-
-Sets the data string (internally called by the constructor)
-
-
- getLength()
-
- : int
-
-returns the byte count of the $data string
-
-
- getLengthBits()
-
- : int
-
-returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- getMinimumVersion()
-
- : int
-
-returns the minimum version number for the given string
-
-
- maskECC()
-
- : array<string|int, mixed>
-
-ECC masking
-
-
- parseInt()
-
- : int
-
-get the code for the given numeric string
-
-
- poly()
-
- : array<string|int, mixed>
-
-helper method for the polynomial operations
-
-
- write()
-
- : void
-
-writes the actual data string to the BitBuffer
-
-
- writeBitBuffer()
-
- : void
-
-creates a BitBuffer and writes the string data to it
-
-
-
-
-
-
-
-
-
-
-
-
- $bitBuffer
-
-
-
-
-
-
- a BitBuffer instance
-
-
- protected
- BitBuffer
- $bitBuffer
-
-
-
-
-
-
-
-
-
- $datamode
-
-
-
-
-
-
- the current data mode: Num, Alphanum, Kanji, Byte
-
-
- protected
- int
- $datamode
- = chillerlanQRCodeQRCode::DATA_NUMBER
-
-
-
-
-
-
-
-
- $dcdata
-
-
-
-
-
-
- ECC temp data
-
-
- protected
- array<string|int, mixed>
- $dcdata
-
-
-
-
-
-
-
-
-
- $ecdata
-
-
-
-
-
-
- ECC temp data
-
-
- protected
- array<string|int, mixed>
- $ecdata
-
-
-
-
-
-
-
-
-
- $lengthBits
-
-
-
-
-
-
- mode length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- protected
- array<string|int, mixed>
- $lengthBits
- = [10, 12, 14]
-
- ISO/IEC 18004:2000 Table 3 - Number of bits in Character Count Indicator
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
- the options instance
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $strlen
-
-
-
-
-
-
- the string byte count
-
-
- protected
- int|null
- $strlen
- = null
-
-
-
-
-
-
-
-
- $version
-
-
-
-
-
-
- current QR Code version
-
-
- protected
- int
- $version
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QRDataInterface constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options [ , string $data = null ] ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $data
- : string
- = null
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- initMatrix()
-
-
-
-
- returns a fresh matrix object with the data written for the given $maskPattern
-
-
- public
- initMatrix ( int $maskPattern [ , bool $test = null ] ) : QRMatrix
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
- $test
- : bool
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setData()
-
-
-
-
- Sets the data string (internally called by the constructor)
-
-
- public
- setData ( string $data ) : QRDataInterface
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- QRDataInterface
- —
-
-
-
-
-
-
- getLength()
-
-
-
-
- returns the byte count of the $data string
-
-
- protected
- getLength ( string $data ) : int
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getLengthBits()
-
-
-
-
- returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- protected
- getLengthBits ( ) : int
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
- codeCoverageIgnore
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getMinimumVersion()
-
-
-
-
- returns the minimum version number for the given string
-
-
- protected
- getMinimumVersion ( ) : int
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- maskECC()
-
-
-
-
- ECC masking
-
-
- protected
- maskECC ( ) : array<string|int, mixed>
-
- ISO/IEC 18004:2000 Section 8.5 ff
-
-
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/error-correction-coding
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- parseInt()
-
-
-
-
- get the code for the given numeric string
-
-
- protected
- parseInt ( string $string ) : int
-
-
-
- Parameters
-
-
- $string
- : string
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
- on an illegal character occurence
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- poly()
-
-
-
-
- helper method for the polynomial operations
-
-
- protected
- poly ( int $key , int $count ) : array<string|int, mixed>
-
-
-
- Parameters
-
-
- $key
- : int
-
-
-
-
-
- $count
- : int
-
-
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- write()
-
-
-
-
- writes the actual data string to the BitBuffer
-
-
- protected
- write ( string $data ) : void
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- inheritdoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- writeBitBuffer()
-
-
-
-
- creates a BitBuffer and writes the string data to it
-
-
- protected
- writeBitBuffer ( string $data ) : void
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Data-QRCodeDataException.html b/classes/chillerlan-QRCode-Data-QRCodeDataException.html
deleted file mode 100644
index d23359727..000000000
--- a/classes/chillerlan-QRCode-Data-QRCodeDataException.html
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCodeDataException
-
-
- extends QRCodeException
-
-
-
-
-
-
-
-
- An exception container
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Data-QRDataAbstract.html b/classes/chillerlan-QRCode-Data-QRDataAbstract.html
deleted file mode 100644
index fe4de6fd6..000000000
--- a/classes/chillerlan-QRCode-Data-QRDataAbstract.html
+++ /dev/null
@@ -1,1099 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRDataAbstract
-
-
-
-
- implements
- QRDataInterface
-
-
-
-
-
- Processes the binary data and maps it on a matrix which is then being returned
-
-
-
-
-
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
- QRDataInterface
- Specifies the methods reqired for the data modules (Number, Alphanum, Byte and Kanji)
-and holds version information in several constants
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $bitBuffer
-
- : BitBuffer
-
-a BitBuffer instance
-
-
- $datamode
-
- : int
-
-the current data mode: Num, Alphanum, Kanji, Byte
-
-
- $dcdata
-
- : array<string|int, mixed>
-
-ECC temp data
-
-
- $ecdata
-
- : array<string|int, mixed>
-
-ECC temp data
-
-
- $lengthBits
-
- : array<string|int, mixed>
-
-mode length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- $options
-
- : SettingsContainerInterface
-
-the options instance
-
-
- $strlen
-
- : int|null
-
-the string byte count
-
-
- $version
-
- : int
-
-current QR Code version
-
-
- __construct()
-
- : mixed
-
-QRDataInterface constructor.
-
-
- initMatrix()
-
- : QRMatrix
-
-returns a fresh matrix object with the data written for the given $maskPattern
-
-
- setData()
-
- : QRDataInterface
-
-Sets the data string (internally called by the constructor)
-
-
- getLength()
-
- : int
-
-returns the byte count of the $data string
-
-
- getLengthBits()
-
- : int
-
-returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- getMinimumVersion()
-
- : int
-
-returns the minimum version number for the given string
-
-
- maskECC()
-
- : array<string|int, mixed>
-
-ECC masking
-
-
- poly()
-
- : array<string|int, mixed>
-
-helper method for the polynomial operations
-
-
- write()
-
- : void
-
-writes the actual data string to the BitBuffer
-
-
- writeBitBuffer()
-
- : void
-
-creates a BitBuffer and writes the string data to it
-
-
-
-
-
-
-
-
-
-
-
-
- $bitBuffer
-
-
-
-
-
-
- a BitBuffer instance
-
-
- protected
- BitBuffer
- $bitBuffer
-
-
-
-
-
-
-
-
-
- $datamode
-
-
-
-
-
-
- the current data mode: Num, Alphanum, Kanji, Byte
-
-
- protected
- int
- $datamode
-
-
-
-
-
-
-
-
-
- $dcdata
-
-
-
-
-
-
- ECC temp data
-
-
- protected
- array<string|int, mixed>
- $dcdata
-
-
-
-
-
-
-
-
-
- $ecdata
-
-
-
-
-
-
- ECC temp data
-
-
- protected
- array<string|int, mixed>
- $ecdata
-
-
-
-
-
-
-
-
-
- $lengthBits
-
-
-
-
-
-
- mode length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- protected
- array<string|int, mixed>
- $lengthBits
- = [0, 0, 0]
-
- ISO/IEC 18004:2000 Table 3 - Number of bits in Character Count Indicator
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
- the options instance
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $strlen
-
-
-
-
-
-
- the string byte count
-
-
- protected
- int|null
- $strlen
- = null
-
-
-
-
-
-
-
-
- $version
-
-
-
-
-
-
- current QR Code version
-
-
- protected
- int
- $version
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QRDataInterface constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options [ , string $data = null ] ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $data
- : string
- = null
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- initMatrix()
-
-
-
-
- returns a fresh matrix object with the data written for the given $maskPattern
-
-
- public
- initMatrix ( int $maskPattern [ , bool $test = null ] ) : QRMatrix
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
- $test
- : bool
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setData()
-
-
-
-
- Sets the data string (internally called by the constructor)
-
-
- public
- setData ( string $data ) : QRDataInterface
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- QRDataInterface
- —
-
-
-
-
-
-
- getLength()
-
-
-
-
- returns the byte count of the $data string
-
-
- protected
- getLength ( string $data ) : int
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getLengthBits()
-
-
-
-
- returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
-
-
- protected
- getLengthBits ( ) : int
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
- codeCoverageIgnore
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- getMinimumVersion()
-
-
-
-
- returns the minimum version number for the given string
-
-
- protected
- getMinimumVersion ( ) : int
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- maskECC()
-
-
-
-
- ECC masking
-
-
- protected
- maskECC ( ) : array<string|int, mixed>
-
- ISO/IEC 18004:2000 Section 8.5 ff
-
-
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/error-correction-coding
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- poly()
-
-
-
-
- helper method for the polynomial operations
-
-
- protected
- poly ( int $key , int $count ) : array<string|int, mixed>
-
-
-
- Parameters
-
-
- $key
- : int
-
-
-
-
-
- $count
- : int
-
-
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- write()
-
-
-
-
- writes the actual data string to the BitBuffer
-
-
- protected
- abstract write ( string $data ) : void
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- see
-
-
- QRDataAbstract::writeBitBuffer()
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- writeBitBuffer()
-
-
-
-
- creates a BitBuffer and writes the string data to it
-
-
- protected
- writeBitBuffer ( string $data ) : void
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Data-QRDataInterface.html b/classes/chillerlan-QRCode-Data-QRDataInterface.html
deleted file mode 100644
index 196236ba7..000000000
--- a/classes/chillerlan-QRCode-Data-QRDataInterface.html
+++ /dev/null
@@ -1,705 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRDataInterface
-
-
-
-
- Specifies the methods reqired for the data modules (Number, Alphanum, Byte and Kanji)
-and holds version information in several constants
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- CHAR_MAP_ALPHANUM
-
- = ['0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, 'N' => 23, 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, 'W' => 32, 'X' => 33, 'Y' => 34, 'Z' => 35, ' ' => 36, '$' => 37, '%' => 38, '*' => 39, '+' => 40, '-' => 41, '.' => 42, '/' => 43, ':' => 44]
-
-ISO/IEC 18004:2000 Table 5
-
-
- CHAR_MAP_NUMBER
-
- = ['0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9]
-
-
-
-
- MAX_BITS
-
- = [
- // version => [L, M, Q, H ]
- 1 => [152, 128, 104, 72],
- 2 => [272, 224, 176, 128],
- 3 => [440, 352, 272, 208],
- 4 => [640, 512, 384, 288],
- 5 => [864, 688, 496, 368],
- 6 => [1088, 864, 608, 480],
- 7 => [1248, 992, 704, 528],
- 8 => [1552, 1232, 880, 688],
- 9 => [1856, 1456, 1056, 800],
- 10 => [2192, 1728, 1232, 976],
- 11 => [2592, 2032, 1440, 1120],
- 12 => [2960, 2320, 1648, 1264],
- 13 => [3424, 2672, 1952, 1440],
- 14 => [3688, 2920, 2088, 1576],
- 15 => [4184, 3320, 2360, 1784],
- 16 => [4712, 3624, 2600, 2024],
- 17 => [5176, 4056, 2936, 2264],
- 18 => [5768, 4504, 3176, 2504],
- 19 => [6360, 5016, 3560, 2728],
- 20 => [6888, 5352, 3880, 3080],
- 21 => [7456, 5712, 4096, 3248],
- 22 => [8048, 6256, 4544, 3536],
- 23 => [8752, 6880, 4912, 3712],
- 24 => [9392, 7312, 5312, 4112],
- 25 => [10208, 8000, 5744, 4304],
- 26 => [10960, 8496, 6032, 4768],
- 27 => [11744, 9024, 6464, 5024],
- 28 => [12248, 9544, 6968, 5288],
- 29 => [13048, 10136, 7288, 5608],
- 30 => [13880, 10984, 7880, 5960],
- 31 => [14744, 11640, 8264, 6344],
- 32 => [15640, 12328, 8920, 6760],
- 33 => [16568, 13048, 9368, 7208],
- 34 => [17528, 13800, 9848, 7688],
- 35 => [18448, 14496, 10288, 7888],
- 36 => [19472, 15312, 10832, 8432],
- 37 => [20528, 15936, 11408, 8768],
- 38 => [21616, 16816, 12016, 9136],
- 39 => [22496, 17728, 12656, 9776],
- 40 => [23648, 18672, 13328, 10208],
-]
-
-ISO/IEC 18004:2000 Tables 7-11 - Number of symbol characters and input data capacity for versions 1 to 40
-
-
- MAX_LENGTH
-
- = [
- // v => [NUMERIC => [L, M, Q, H ], ALPHANUM => [L, M, Q, H], BINARY => [L, M, Q, H ], KANJI => [L, M, Q, H ]] // modules
- 1 => [[41, 34, 27, 17], [25, 20, 16, 10], [17, 14, 11, 7], [10, 8, 7, 4]],
- // 21
- 2 => [[77, 63, 48, 34], [47, 38, 29, 20], [32, 26, 20, 14], [20, 16, 12, 8]],
- // 25
- 3 => [[127, 101, 77, 58], [77, 61, 47, 35], [53, 42, 32, 24], [32, 26, 20, 15]],
- // 29
- 4 => [[187, 149, 111, 82], [114, 90, 67, 50], [78, 62, 46, 34], [48, 38, 28, 21]],
- // 33
- 5 => [[255, 202, 144, 106], [154, 122, 87, 64], [106, 84, 60, 44], [65, 52, 37, 27]],
- // 37
- 6 => [[322, 255, 178, 139], [195, 154, 108, 84], [134, 106, 74, 58], [82, 65, 45, 36]],
- // 41
- 7 => [[370, 293, 207, 154], [224, 178, 125, 93], [154, 122, 86, 64], [95, 75, 53, 39]],
- // 45
- 8 => [[461, 365, 259, 202], [279, 221, 157, 122], [192, 152, 108, 84], [118, 93, 66, 52]],
- // 49
- 9 => [[552, 432, 312, 235], [335, 262, 189, 143], [230, 180, 130, 98], [141, 111, 80, 60]],
- // 53
- 10 => [[652, 513, 364, 288], [395, 311, 221, 174], [271, 213, 151, 119], [167, 131, 93, 74]],
- // 57
- 11 => [[772, 604, 427, 331], [468, 366, 259, 200], [321, 251, 177, 137], [198, 155, 109, 85]],
- // 61
- 12 => [[883, 691, 489, 374], [535, 419, 296, 227], [367, 287, 203, 155], [226, 177, 125, 96]],
- // 65
- 13 => [[1022, 796, 580, 427], [619, 483, 352, 259], [425, 331, 241, 177], [262, 204, 149, 109]],
- // 69 NICE!
- 14 => [[1101, 871, 621, 468], [667, 528, 376, 283], [458, 362, 258, 194], [282, 223, 159, 120]],
- // 73
- 15 => [[1250, 991, 703, 530], [758, 600, 426, 321], [520, 412, 292, 220], [320, 254, 180, 136]],
- // 77
- 16 => [[1408, 1082, 775, 602], [854, 656, 470, 365], [586, 450, 322, 250], [361, 277, 198, 154]],
- // 81
- 17 => [[1548, 1212, 876, 674], [938, 734, 531, 408], [644, 504, 364, 280], [397, 310, 224, 173]],
- // 85
- 18 => [[1725, 1346, 948, 746], [1046, 816, 574, 452], [718, 560, 394, 310], [442, 345, 243, 191]],
- // 89
- 19 => [[1903, 1500, 1063, 813], [1153, 909, 644, 493], [792, 624, 442, 338], [488, 384, 272, 208]],
- // 93
- 20 => [[2061, 1600, 1159, 919], [1249, 970, 702, 557], [858, 666, 482, 382], [528, 410, 297, 235]],
- // 97
- 21 => [[2232, 1708, 1224, 969], [1352, 1035, 742, 587], [929, 711, 509, 403], [572, 438, 314, 248]],
- // 101
- 22 => [[2409, 1872, 1358, 1056], [1460, 1134, 823, 640], [1003, 779, 565, 439], [618, 480, 348, 270]],
- // 105
- 23 => [[2620, 2059, 1468, 1108], [1588, 1248, 890, 672], [1091, 857, 611, 461], [672, 528, 376, 284]],
- // 109
- 24 => [[2812, 2188, 1588, 1228], [1704, 1326, 963, 744], [1171, 911, 661, 511], [721, 561, 407, 315]],
- // 113
- 25 => [[3057, 2395, 1718, 1286], [1853, 1451, 1041, 779], [1273, 997, 715, 535], [784, 614, 440, 330]],
- // 117
- 26 => [[3283, 2544, 1804, 1425], [1990, 1542, 1094, 864], [1367, 1059, 751, 593], [842, 652, 462, 365]],
- // 121
- 27 => [[3517, 2701, 1933, 1501], [2132, 1637, 1172, 910], [1465, 1125, 805, 625], [902, 692, 496, 385]],
- // 125
- 28 => [[3669, 2857, 2085, 1581], [2223, 1732, 1263, 958], [1528, 1190, 868, 658], [940, 732, 534, 405]],
- // 129
- 29 => [[3909, 3035, 2181, 1677], [2369, 1839, 1322, 1016], [1628, 1264, 908, 698], [1002, 778, 559, 430]],
- // 133
- 30 => [[4158, 3289, 2358, 1782], [2520, 1994, 1429, 1080], [1732, 1370, 982, 742], [1066, 843, 604, 457]],
- // 137
- 31 => [[4417, 3486, 2473, 1897], [2677, 2113, 1499, 1150], [1840, 1452, 1030, 790], [1132, 894, 634, 486]],
- // 141
- 32 => [[4686, 3693, 2670, 2022], [2840, 2238, 1618, 1226], [1952, 1538, 1112, 842], [1201, 947, 684, 518]],
- // 145
- 33 => [[4965, 3909, 2805, 2157], [3009, 2369, 1700, 1307], [2068, 1628, 1168, 898], [1273, 1002, 719, 553]],
- // 149
- 34 => [[5253, 4134, 2949, 2301], [3183, 2506, 1787, 1394], [2188, 1722, 1228, 958], [1347, 1060, 756, 590]],
- // 153
- 35 => [[5529, 4343, 3081, 2361], [3351, 2632, 1867, 1431], [2303, 1809, 1283, 983], [1417, 1113, 790, 605]],
- // 157
- 36 => [[5836, 4588, 3244, 2524], [3537, 2780, 1966, 1530], [2431, 1911, 1351, 1051], [1496, 1176, 832, 647]],
- // 161
- 37 => [[6153, 4775, 3417, 2625], [3729, 2894, 2071, 1591], [2563, 1989, 1423, 1093], [1577, 1224, 876, 673]],
- // 165
- 38 => [[6479, 5039, 3599, 2735], [3927, 3054, 2181, 1658], [2699, 2099, 1499, 1139], [1661, 1292, 923, 701]],
- // 169
- 39 => [[6743, 5313, 3791, 2927], [4087, 3220, 2298, 1774], [2809, 2213, 1579, 1219], [1729, 1362, 972, 750]],
- // 173
- 40 => [[7089, 5596, 3993, 3057], [4296, 3391, 2420, 1852], [2953, 2331, 1663, 1273], [1817, 1435, 1024, 784]],
-]
-
-ISO/IEC 18004:2000 Tables 7-11 - Number of symbol characters and input data capacity for versions 1 to 40
-
-
- RSBLOCKS
-
- = [1 => [[1, 0, 26, 19], [1, 0, 26, 16], [1, 0, 26, 13], [1, 0, 26, 9]], 2 => [[1, 0, 44, 34], [1, 0, 44, 28], [1, 0, 44, 22], [1, 0, 44, 16]], 3 => [[1, 0, 70, 55], [1, 0, 70, 44], [2, 0, 35, 17], [2, 0, 35, 13]], 4 => [[1, 0, 100, 80], [2, 0, 50, 32], [2, 0, 50, 24], [4, 0, 25, 9]], 5 => [[1, 0, 134, 108], [2, 0, 67, 43], [2, 2, 33, 15], [2, 2, 33, 11]], 6 => [[2, 0, 86, 68], [4, 0, 43, 27], [4, 0, 43, 19], [4, 0, 43, 15]], 7 => [[2, 0, 98, 78], [4, 0, 49, 31], [2, 4, 32, 14], [4, 1, 39, 13]], 8 => [[2, 0, 121, 97], [2, 2, 60, 38], [4, 2, 40, 18], [4, 2, 40, 14]], 9 => [[2, 0, 146, 116], [3, 2, 58, 36], [4, 4, 36, 16], [4, 4, 36, 12]], 10 => [[2, 2, 86, 68], [4, 1, 69, 43], [6, 2, 43, 19], [6, 2, 43, 15]], 11 => [[4, 0, 101, 81], [1, 4, 80, 50], [4, 4, 50, 22], [3, 8, 36, 12]], 12 => [[2, 2, 116, 92], [6, 2, 58, 36], [4, 6, 46, 20], [7, 4, 42, 14]], 13 => [[4, 0, 133, 107], [8, 1, 59, 37], [8, 4, 44, 20], [12, 4, 33, 11]], 14 => [[3, 1, 145, 115], [4, 5, 64, 40], [11, 5, 36, 16], [11, 5, 36, 12]], 15 => [[5, 1, 109, 87], [5, 5, 65, 41], [5, 7, 54, 24], [11, 7, 36, 12]], 16 => [[5, 1, 122, 98], [7, 3, 73, 45], [15, 2, 43, 19], [3, 13, 45, 15]], 17 => [[1, 5, 135, 107], [10, 1, 74, 46], [1, 15, 50, 22], [2, 17, 42, 14]], 18 => [[5, 1, 150, 120], [9, 4, 69, 43], [17, 1, 50, 22], [2, 19, 42, 14]], 19 => [[3, 4, 141, 113], [3, 11, 70, 44], [17, 4, 47, 21], [9, 16, 39, 13]], 20 => [[3, 5, 135, 107], [3, 13, 67, 41], [15, 5, 54, 24], [15, 10, 43, 15]], 21 => [[4, 4, 144, 116], [17, 0, 68, 42], [17, 6, 50, 22], [19, 6, 46, 16]], 22 => [[2, 7, 139, 111], [17, 0, 74, 46], [7, 16, 54, 24], [34, 0, 37, 13]], 23 => [[4, 5, 151, 121], [4, 14, 75, 47], [11, 14, 54, 24], [16, 14, 45, 15]], 24 => [[6, 4, 147, 117], [6, 14, 73, 45], [11, 16, 54, 24], [30, 2, 46, 16]], 25 => [[8, 4, 132, 106], [8, 13, 75, 47], [7, 22, 54, 24], [22, 13, 45, 15]], 26 => [[10, 2, 142, 114], [19, 4, 74, 46], [28, 6, 50, 22], [33, 4, 46, 16]], 27 => [[8, 4, 152, 122], [22, 3, 73, 45], [8, 26, 53, 23], [12, 28, 45, 15]], 28 => [[3, 10, 147, 117], [3, 23, 73, 45], [4, 31, 54, 24], [11, 31, 45, 15]], 29 => [[7, 7, 146, 116], [21, 7, 73, 45], [1, 37, 53, 23], [19, 26, 45, 15]], 30 => [[5, 10, 145, 115], [19, 10, 75, 47], [15, 25, 54, 24], [23, 25, 45, 15]], 31 => [[13, 3, 145, 115], [2, 29, 74, 46], [42, 1, 54, 24], [23, 28, 45, 15]], 32 => [[17, 0, 145, 115], [10, 23, 74, 46], [10, 35, 54, 24], [19, 35, 45, 15]], 33 => [[17, 1, 145, 115], [14, 21, 74, 46], [29, 19, 54, 24], [11, 46, 45, 15]], 34 => [[13, 6, 145, 115], [14, 23, 74, 46], [44, 7, 54, 24], [59, 1, 46, 16]], 35 => [[12, 7, 151, 121], [12, 26, 75, 47], [39, 14, 54, 24], [22, 41, 45, 15]], 36 => [[6, 14, 151, 121], [6, 34, 75, 47], [46, 10, 54, 24], [2, 64, 45, 15]], 37 => [[17, 4, 152, 122], [29, 14, 74, 46], [49, 10, 54, 24], [24, 46, 45, 15]], 38 => [[4, 18, 152, 122], [13, 32, 74, 46], [48, 14, 54, 24], [42, 32, 45, 15]], 39 => [[20, 4, 147, 117], [40, 7, 75, 47], [43, 22, 54, 24], [10, 67, 45, 15]], 40 => [[19, 6, 148, 118], [18, 31, 75, 47], [34, 34, 54, 24], [20, 61, 45, 15]]]
-
-
-
-
- initMatrix()
-
- : QRMatrix
-
-returns a fresh matrix object with the data written for the given $maskPattern
-
-
- setData()
-
- : QRDataInterface
-
-Sets the data string (internally called by the constructor)
-
-
-
-
-
-
-
-
-
-
- CHAR_MAP_ALPHANUM
-
-
-
-
-
- ISO/IEC 18004:2000 Table 5
-
-
- public
- array<string|int, int>
- CHAR_MAP_ALPHANUM
- = ['0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, 'N' => 23, 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, 'W' => 32, 'X' => 33, 'Y' => 34, 'Z' => 35, ' ' => 36, '$' => 37, '%' => 38, '*' => 39, '+' => 40, '-' => 41, '.' => 42, '/' => 43, ':' => 44]
-
-
-
-
-
-
-
-
-
-
- CHAR_MAP_NUMBER
-
-
-
-
-
-
-
- public
- array<string|int, int>
- CHAR_MAP_NUMBER
- = ['0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9]
-
-
-
-
-
-
-
-
-
-
- MAX_BITS
-
-
-
-
-
- ISO/IEC 18004:2000 Tables 7-11 - Number of symbol characters and input data capacity for versions 1 to 40
-
-
- public
- int
- MAX_BITS
- = [
- // version => [L, M, Q, H ]
- 1 => [152, 128, 104, 72],
- 2 => [272, 224, 176, 128],
- 3 => [440, 352, 272, 208],
- 4 => [640, 512, 384, 288],
- 5 => [864, 688, 496, 368],
- 6 => [1088, 864, 608, 480],
- 7 => [1248, 992, 704, 528],
- 8 => [1552, 1232, 880, 688],
- 9 => [1856, 1456, 1056, 800],
- 10 => [2192, 1728, 1232, 976],
- 11 => [2592, 2032, 1440, 1120],
- 12 => [2960, 2320, 1648, 1264],
- 13 => [3424, 2672, 1952, 1440],
- 14 => [3688, 2920, 2088, 1576],
- 15 => [4184, 3320, 2360, 1784],
- 16 => [4712, 3624, 2600, 2024],
- 17 => [5176, 4056, 2936, 2264],
- 18 => [5768, 4504, 3176, 2504],
- 19 => [6360, 5016, 3560, 2728],
- 20 => [6888, 5352, 3880, 3080],
- 21 => [7456, 5712, 4096, 3248],
- 22 => [8048, 6256, 4544, 3536],
- 23 => [8752, 6880, 4912, 3712],
- 24 => [9392, 7312, 5312, 4112],
- 25 => [10208, 8000, 5744, 4304],
- 26 => [10960, 8496, 6032, 4768],
- 27 => [11744, 9024, 6464, 5024],
- 28 => [12248, 9544, 6968, 5288],
- 29 => [13048, 10136, 7288, 5608],
- 30 => [13880, 10984, 7880, 5960],
- 31 => [14744, 11640, 8264, 6344],
- 32 => [15640, 12328, 8920, 6760],
- 33 => [16568, 13048, 9368, 7208],
- 34 => [17528, 13800, 9848, 7688],
- 35 => [18448, 14496, 10288, 7888],
- 36 => [19472, 15312, 10832, 8432],
- 37 => [20528, 15936, 11408, 8768],
- 38 => [21616, 16816, 12016, 9136],
- 39 => [22496, 17728, 12656, 9776],
- 40 => [23648, 18672, 13328, 10208],
-]
-
-
-
-
-
-
-
-
-
-
- MAX_LENGTH
-
-
-
-
-
- ISO/IEC 18004:2000 Tables 7-11 - Number of symbol characters and input data capacity for versions 1 to 40
-
-
- public
- int
- MAX_LENGTH
- = [
- // v => [NUMERIC => [L, M, Q, H ], ALPHANUM => [L, M, Q, H], BINARY => [L, M, Q, H ], KANJI => [L, M, Q, H ]] // modules
- 1 => [[41, 34, 27, 17], [25, 20, 16, 10], [17, 14, 11, 7], [10, 8, 7, 4]],
- // 21
- 2 => [[77, 63, 48, 34], [47, 38, 29, 20], [32, 26, 20, 14], [20, 16, 12, 8]],
- // 25
- 3 => [[127, 101, 77, 58], [77, 61, 47, 35], [53, 42, 32, 24], [32, 26, 20, 15]],
- // 29
- 4 => [[187, 149, 111, 82], [114, 90, 67, 50], [78, 62, 46, 34], [48, 38, 28, 21]],
- // 33
- 5 => [[255, 202, 144, 106], [154, 122, 87, 64], [106, 84, 60, 44], [65, 52, 37, 27]],
- // 37
- 6 => [[322, 255, 178, 139], [195, 154, 108, 84], [134, 106, 74, 58], [82, 65, 45, 36]],
- // 41
- 7 => [[370, 293, 207, 154], [224, 178, 125, 93], [154, 122, 86, 64], [95, 75, 53, 39]],
- // 45
- 8 => [[461, 365, 259, 202], [279, 221, 157, 122], [192, 152, 108, 84], [118, 93, 66, 52]],
- // 49
- 9 => [[552, 432, 312, 235], [335, 262, 189, 143], [230, 180, 130, 98], [141, 111, 80, 60]],
- // 53
- 10 => [[652, 513, 364, 288], [395, 311, 221, 174], [271, 213, 151, 119], [167, 131, 93, 74]],
- // 57
- 11 => [[772, 604, 427, 331], [468, 366, 259, 200], [321, 251, 177, 137], [198, 155, 109, 85]],
- // 61
- 12 => [[883, 691, 489, 374], [535, 419, 296, 227], [367, 287, 203, 155], [226, 177, 125, 96]],
- // 65
- 13 => [[1022, 796, 580, 427], [619, 483, 352, 259], [425, 331, 241, 177], [262, 204, 149, 109]],
- // 69 NICE!
- 14 => [[1101, 871, 621, 468], [667, 528, 376, 283], [458, 362, 258, 194], [282, 223, 159, 120]],
- // 73
- 15 => [[1250, 991, 703, 530], [758, 600, 426, 321], [520, 412, 292, 220], [320, 254, 180, 136]],
- // 77
- 16 => [[1408, 1082, 775, 602], [854, 656, 470, 365], [586, 450, 322, 250], [361, 277, 198, 154]],
- // 81
- 17 => [[1548, 1212, 876, 674], [938, 734, 531, 408], [644, 504, 364, 280], [397, 310, 224, 173]],
- // 85
- 18 => [[1725, 1346, 948, 746], [1046, 816, 574, 452], [718, 560, 394, 310], [442, 345, 243, 191]],
- // 89
- 19 => [[1903, 1500, 1063, 813], [1153, 909, 644, 493], [792, 624, 442, 338], [488, 384, 272, 208]],
- // 93
- 20 => [[2061, 1600, 1159, 919], [1249, 970, 702, 557], [858, 666, 482, 382], [528, 410, 297, 235]],
- // 97
- 21 => [[2232, 1708, 1224, 969], [1352, 1035, 742, 587], [929, 711, 509, 403], [572, 438, 314, 248]],
- // 101
- 22 => [[2409, 1872, 1358, 1056], [1460, 1134, 823, 640], [1003, 779, 565, 439], [618, 480, 348, 270]],
- // 105
- 23 => [[2620, 2059, 1468, 1108], [1588, 1248, 890, 672], [1091, 857, 611, 461], [672, 528, 376, 284]],
- // 109
- 24 => [[2812, 2188, 1588, 1228], [1704, 1326, 963, 744], [1171, 911, 661, 511], [721, 561, 407, 315]],
- // 113
- 25 => [[3057, 2395, 1718, 1286], [1853, 1451, 1041, 779], [1273, 997, 715, 535], [784, 614, 440, 330]],
- // 117
- 26 => [[3283, 2544, 1804, 1425], [1990, 1542, 1094, 864], [1367, 1059, 751, 593], [842, 652, 462, 365]],
- // 121
- 27 => [[3517, 2701, 1933, 1501], [2132, 1637, 1172, 910], [1465, 1125, 805, 625], [902, 692, 496, 385]],
- // 125
- 28 => [[3669, 2857, 2085, 1581], [2223, 1732, 1263, 958], [1528, 1190, 868, 658], [940, 732, 534, 405]],
- // 129
- 29 => [[3909, 3035, 2181, 1677], [2369, 1839, 1322, 1016], [1628, 1264, 908, 698], [1002, 778, 559, 430]],
- // 133
- 30 => [[4158, 3289, 2358, 1782], [2520, 1994, 1429, 1080], [1732, 1370, 982, 742], [1066, 843, 604, 457]],
- // 137
- 31 => [[4417, 3486, 2473, 1897], [2677, 2113, 1499, 1150], [1840, 1452, 1030, 790], [1132, 894, 634, 486]],
- // 141
- 32 => [[4686, 3693, 2670, 2022], [2840, 2238, 1618, 1226], [1952, 1538, 1112, 842], [1201, 947, 684, 518]],
- // 145
- 33 => [[4965, 3909, 2805, 2157], [3009, 2369, 1700, 1307], [2068, 1628, 1168, 898], [1273, 1002, 719, 553]],
- // 149
- 34 => [[5253, 4134, 2949, 2301], [3183, 2506, 1787, 1394], [2188, 1722, 1228, 958], [1347, 1060, 756, 590]],
- // 153
- 35 => [[5529, 4343, 3081, 2361], [3351, 2632, 1867, 1431], [2303, 1809, 1283, 983], [1417, 1113, 790, 605]],
- // 157
- 36 => [[5836, 4588, 3244, 2524], [3537, 2780, 1966, 1530], [2431, 1911, 1351, 1051], [1496, 1176, 832, 647]],
- // 161
- 37 => [[6153, 4775, 3417, 2625], [3729, 2894, 2071, 1591], [2563, 1989, 1423, 1093], [1577, 1224, 876, 673]],
- // 165
- 38 => [[6479, 5039, 3599, 2735], [3927, 3054, 2181, 1658], [2699, 2099, 1499, 1139], [1661, 1292, 923, 701]],
- // 169
- 39 => [[6743, 5313, 3791, 2927], [4087, 3220, 2298, 1774], [2809, 2213, 1579, 1219], [1729, 1362, 972, 750]],
- // 173
- 40 => [[7089, 5596, 3993, 3057], [4296, 3391, 2420, 1852], [2953, 2331, 1663, 1273], [1817, 1435, 1024, 784]],
-]
-
-
-
-
-
-
-
-
-
- see
-
-
- http://www.qrcode.com/en/about/version.html
-
-
-
-
-
-
-
-
-
- RSBLOCKS
-
-
-
-
-
-
-
- public
- int
- RSBLOCKS
- = [1 => [[1, 0, 26, 19], [1, 0, 26, 16], [1, 0, 26, 13], [1, 0, 26, 9]], 2 => [[1, 0, 44, 34], [1, 0, 44, 28], [1, 0, 44, 22], [1, 0, 44, 16]], 3 => [[1, 0, 70, 55], [1, 0, 70, 44], [2, 0, 35, 17], [2, 0, 35, 13]], 4 => [[1, 0, 100, 80], [2, 0, 50, 32], [2, 0, 50, 24], [4, 0, 25, 9]], 5 => [[1, 0, 134, 108], [2, 0, 67, 43], [2, 2, 33, 15], [2, 2, 33, 11]], 6 => [[2, 0, 86, 68], [4, 0, 43, 27], [4, 0, 43, 19], [4, 0, 43, 15]], 7 => [[2, 0, 98, 78], [4, 0, 49, 31], [2, 4, 32, 14], [4, 1, 39, 13]], 8 => [[2, 0, 121, 97], [2, 2, 60, 38], [4, 2, 40, 18], [4, 2, 40, 14]], 9 => [[2, 0, 146, 116], [3, 2, 58, 36], [4, 4, 36, 16], [4, 4, 36, 12]], 10 => [[2, 2, 86, 68], [4, 1, 69, 43], [6, 2, 43, 19], [6, 2, 43, 15]], 11 => [[4, 0, 101, 81], [1, 4, 80, 50], [4, 4, 50, 22], [3, 8, 36, 12]], 12 => [[2, 2, 116, 92], [6, 2, 58, 36], [4, 6, 46, 20], [7, 4, 42, 14]], 13 => [[4, 0, 133, 107], [8, 1, 59, 37], [8, 4, 44, 20], [12, 4, 33, 11]], 14 => [[3, 1, 145, 115], [4, 5, 64, 40], [11, 5, 36, 16], [11, 5, 36, 12]], 15 => [[5, 1, 109, 87], [5, 5, 65, 41], [5, 7, 54, 24], [11, 7, 36, 12]], 16 => [[5, 1, 122, 98], [7, 3, 73, 45], [15, 2, 43, 19], [3, 13, 45, 15]], 17 => [[1, 5, 135, 107], [10, 1, 74, 46], [1, 15, 50, 22], [2, 17, 42, 14]], 18 => [[5, 1, 150, 120], [9, 4, 69, 43], [17, 1, 50, 22], [2, 19, 42, 14]], 19 => [[3, 4, 141, 113], [3, 11, 70, 44], [17, 4, 47, 21], [9, 16, 39, 13]], 20 => [[3, 5, 135, 107], [3, 13, 67, 41], [15, 5, 54, 24], [15, 10, 43, 15]], 21 => [[4, 4, 144, 116], [17, 0, 68, 42], [17, 6, 50, 22], [19, 6, 46, 16]], 22 => [[2, 7, 139, 111], [17, 0, 74, 46], [7, 16, 54, 24], [34, 0, 37, 13]], 23 => [[4, 5, 151, 121], [4, 14, 75, 47], [11, 14, 54, 24], [16, 14, 45, 15]], 24 => [[6, 4, 147, 117], [6, 14, 73, 45], [11, 16, 54, 24], [30, 2, 46, 16]], 25 => [[8, 4, 132, 106], [8, 13, 75, 47], [7, 22, 54, 24], [22, 13, 45, 15]], 26 => [[10, 2, 142, 114], [19, 4, 74, 46], [28, 6, 50, 22], [33, 4, 46, 16]], 27 => [[8, 4, 152, 122], [22, 3, 73, 45], [8, 26, 53, 23], [12, 28, 45, 15]], 28 => [[3, 10, 147, 117], [3, 23, 73, 45], [4, 31, 54, 24], [11, 31, 45, 15]], 29 => [[7, 7, 146, 116], [21, 7, 73, 45], [1, 37, 53, 23], [19, 26, 45, 15]], 30 => [[5, 10, 145, 115], [19, 10, 75, 47], [15, 25, 54, 24], [23, 25, 45, 15]], 31 => [[13, 3, 145, 115], [2, 29, 74, 46], [42, 1, 54, 24], [23, 28, 45, 15]], 32 => [[17, 0, 145, 115], [10, 23, 74, 46], [10, 35, 54, 24], [19, 35, 45, 15]], 33 => [[17, 1, 145, 115], [14, 21, 74, 46], [29, 19, 54, 24], [11, 46, 45, 15]], 34 => [[13, 6, 145, 115], [14, 23, 74, 46], [44, 7, 54, 24], [59, 1, 46, 16]], 35 => [[12, 7, 151, 121], [12, 26, 75, 47], [39, 14, 54, 24], [22, 41, 45, 15]], 36 => [[6, 14, 151, 121], [6, 34, 75, 47], [46, 10, 54, 24], [2, 64, 45, 15]], 37 => [[17, 4, 152, 122], [29, 14, 74, 46], [49, 10, 54, 24], [24, 46, 45, 15]], 38 => [[4, 18, 152, 122], [13, 32, 74, 46], [48, 14, 54, 24], [42, 32, 45, 15]], 39 => [[20, 4, 147, 117], [40, 7, 75, 47], [43, 22, 54, 24], [10, 67, 45, 15]], 40 => [[19, 6, 148, 118], [18, 31, 75, 47], [34, 34, 54, 24], [20, 61, 45, 15]]]
-
-
-
-
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/error-correction-table
-
-
-
-
-
-
-
-
-
-
-
-
-
- initMatrix()
-
-
-
-
- returns a fresh matrix object with the data written for the given $maskPattern
-
-
- public
- initMatrix ( int $maskPattern [ , bool $test = null ] ) : QRMatrix
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
- $test
- : bool
- = null
-
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setData()
-
-
-
-
- Sets the data string (internally called by the constructor)
-
-
- public
- setData ( string $data ) : QRDataInterface
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
- Return values
- QRDataInterface
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Data-QRMatrix.html b/classes/chillerlan-QRCode-Data-QRMatrix.html
deleted file mode 100644
index cd043a4ae..000000000
--- a/classes/chillerlan-QRCode-Data-QRMatrix.html
+++ /dev/null
@@ -1,2095 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRMatrix
-
-
-
-
-
-
-
-
- Holds a numerical representation of the final QR Code;
-maps the ECC coded binary data and applies the mask pattern
-
-
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/format-version-information
-
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- M_ALIGNMENT
-
- = 0xa
-
-
-
-
- M_DARKMODULE
-
- = 0x2
-
-
-
-
- M_DATA
-
- = 0x4
-
-
-
-
- M_FINDER
-
- = 0x6
-
-
-
-
- M_FINDER_DOT
-
- = 0x16
-
-
-
-
- M_FORMAT
-
- = 0xe
-
-
-
-
- M_LOGO
-
- = 0x14
-
-
-
-
- M_NULL
-
- = 0x0
-
-
-
-
- M_QUIETZONE
-
- = 0x12
-
-
-
-
- M_SEPARATOR
-
- = 0x8
-
-
-
-
- M_TEST
-
- = 0xff
-
-
-
-
- M_TIMING
-
- = 0xc
-
-
-
-
- M_VERSION
-
- = 0x10
-
-
-
-
- alignmentPattern
-
- = [1 => [], 2 => [6, 18], 3 => [6, 22], 4 => [6, 26], 5 => [6, 30], 6 => [6, 34], 7 => [6, 22, 38], 8 => [6, 24, 42], 9 => [6, 26, 46], 10 => [6, 28, 50], 11 => [6, 30, 54], 12 => [6, 32, 58], 13 => [6, 34, 62], 14 => [6, 26, 46, 66], 15 => [6, 26, 48, 70], 16 => [6, 26, 50, 74], 17 => [6, 30, 54, 78], 18 => [6, 30, 56, 82], 19 => [6, 30, 58, 86], 20 => [6, 34, 62, 90], 21 => [6, 28, 50, 72, 94], 22 => [6, 26, 50, 74, 98], 23 => [6, 30, 54, 78, 102], 24 => [6, 28, 54, 80, 106], 25 => [6, 32, 58, 84, 110], 26 => [6, 30, 58, 86, 114], 27 => [6, 34, 62, 90, 118], 28 => [6, 26, 50, 74, 98, 122], 29 => [6, 30, 54, 78, 102, 126], 30 => [6, 26, 52, 78, 104, 130], 31 => [6, 30, 56, 82, 108, 134], 32 => [6, 34, 60, 86, 112, 138], 33 => [6, 30, 58, 86, 114, 142], 34 => [6, 34, 62, 90, 118, 146], 35 => [6, 30, 54, 78, 102, 126, 150], 36 => [6, 24, 50, 76, 102, 128, 154], 37 => [6, 28, 54, 80, 106, 132, 158], 38 => [6, 32, 58, 84, 110, 136, 162], 39 => [6, 26, 54, 82, 110, 138, 166], 40 => [6, 30, 58, 86, 114, 142, 170]]
-
-ISO/IEC 18004:2000 Annex E, Table E.1 - Row/column coordinates of center module of Alignment Patterns
-
-
- formatPattern
-
- = [[
- // L
- 0b111011111000100,
- 0b111001011110011,
- 0b111110110101010,
- 0b111100010011101,
- 0b110011000101111,
- 0b110001100011000,
- 0b110110001000001,
- 0b110100101110110,
-], [
- // M
- 0b101010000010010,
- 0b101000100100101,
- 0b101111001111100,
- 0b101101101001011,
- 0b100010111111001,
- 0b100000011001110,
- 0b100111110010111,
- 0b100101010100000,
-], [
- // Q
- 0b11010101011111,
- 0b11000001101000,
- 0b11111100110001,
- 0b11101000000110,
- 0b10010010110100,
- 0b10000110000011,
- 0b10111011011010,
- 0b10101111101101,
-], [
- // H
- 0b1011010001001,
- 0b1001110111110,
- 0b1110011100111,
- 0b1100111010000,
- 0b11101100010,
- 0b1001010101,
- 0b110100001100,
- 0b100000111011,
-]]
-
-ISO/IEC 18004:2000 Section 8.9 - Format Information
-
-
- versionPattern
-
- = [7 => 0b111110010010100, 8 => 0b1000010110111100, 9 => 0b1001101010011001, 10 => 0b1010010011010011, 11 => 0b1011101111110110, 12 => 0b1100011101100010, 13 => 0b1101100001000111, 14 => 0b1110011000001101, 15 => 0b1111100100101000, 16 => 0b10000101101111000, 17 => 0b10001010001011101, 18 => 0b10010101000010111, 19 => 0b10011010100110010, 20 => 0b10100100110100110, 21 => 0b10101011010000011, 22 => 0b10110100011001001, 23 => 0b10111011111101100, 24 => 0b11000111011000100, 25 => 0b11001000111100001, 26 => 0b11010111110101011, 27 => 0b11011000010001110, 28 => 0b11100110000011010, 29 => 0b11101001100111111, 30 => 0b11110110101110101, 31 => 0b11111001001010000, 32 => 0b100000100111010101, 33 => 0b100001011011110000, 34 => 0b100010100010111010, 35 => 0b100011011110011111, 36 => 0b100100101100001011, 37 => 0b100101010000101110, 38 => 0b100110101001100100, 39 => 0b100111010101000001, 40 => 0b101000110001101001]
-
-ISO/IEC 18004:2000 Annex D, Table D.1 - Version information bit stream for each version
-
-
- $eclevel
-
- : int
-
-the current ECC level
-
-
- $maskPattern
-
- : int
-
-the used mask pattern, set via QRMatrix::mapData()
-
-
- $matrix
-
- : array<string|int, mixed>
-
-the actual matrix data array
-
-
- $moduleCount
-
- : int
-
-the size (side length) of the matrix
-
-
- $version
-
- : int
-
-the current QR Code version number
-
-
- __construct()
-
- : mixed
-
-QRMatrix constructor.
-
-
- check()
-
- : bool
-
-Checks whether a module is true (dark) or false (light)
-
-
- eccLevel()
-
- : int
-
-Returns the current ECC level
-
-
- get()
-
- : int
-
-Returns the value of the module at position [$x, $y]
-
-
- init()
-
- : QRMatrix
-
-shortcut to initialize the matrix
-
-
- mapData()
-
- : QRMatrix
-
-Maps the binary $data array from QRDataInterface::maskECC() on the matrix,
-masking the data using $maskPattern (ISO/IEC 18004:2000 Section 8.8)
-
-
- maskPattern()
-
- : int
-
-Returns the current mask pattern
-
-
- matrix()
-
- : array<string|int, array<string|int, int>>|array<string|int, array<string|int, bool>>
-
-Returns the data matrix, returns a pure boolean representation if $boolean is set to true
-
-
- set()
-
- : QRMatrix
-
-Sets the $M_TYPE value for the module at position [$x, $y]
-
-
- setAlignmentPattern()
-
- : QRMatrix
-
-Draws the 5x5 alignment patterns
-
-
- setDarkModule()
-
- : QRMatrix
-
-Sets the "dark module", that is always on the same position 1x1px away from the bottom left finder
-
-
- setFinderPattern()
-
- : QRMatrix
-
-Draws the 7x7 finder patterns in the corners top left/right and bottom left
-
-
- setFormatInfo()
-
- : QRMatrix
-
-Draws the format info along the finder patterns
-
-
- setLogoSpace()
-
- : QRMatrix
-
-Clears a space of $width * $height in order to add a logo or text.
-
-
- setQuietZone()
-
- : QRMatrix
-
-Draws the "quiet zone" of $size around the matrix
-
-
- setSeparators()
-
- : QRMatrix
-
-Draws the separator lines around the finder patterns
-
-
- setTimingPattern()
-
- : QRMatrix
-
-Draws the timing pattern (h/v checkered line between the finder patterns)
-
-
- setVersionNumber()
-
- : QRMatrix
-
-Draws the version information, 2x 3x6 pixel
-
-
- size()
-
- : int
-
-Returns the absoulute size of the matrix, including quiet zone (after setting it).
-
-
- version()
-
- : int
-
-Returns the current version number
-
-
-
-
-
-
-
-
-
-
- M_ALIGNMENT
-
-
-
-
-
-
-
- public
- int
- M_ALIGNMENT
- = 0xa
-
-
-
-
-
-
-
-
-
-
- M_DARKMODULE
-
-
-
-
-
-
-
- public
- int
- M_DARKMODULE
- = 0x2
-
-
-
-
-
-
-
-
-
-
- M_DATA
-
-
-
-
-
-
-
- public
- int
- M_DATA
- = 0x4
-
-
-
-
-
-
-
-
-
-
- M_FINDER
-
-
-
-
-
-
-
- public
- int
- M_FINDER
- = 0x6
-
-
-
-
-
-
-
-
-
-
- M_FINDER_DOT
-
-
-
-
-
-
-
- public
- int
- M_FINDER_DOT
- = 0x16
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- public
- int
- M_FORMAT
- = 0xe
-
-
-
-
-
-
-
-
-
-
- M_LOGO
-
-
-
-
-
-
-
- public
- int
- M_LOGO
- = 0x14
-
-
-
-
-
-
-
-
-
-
- M_NULL
-
-
-
-
-
-
-
- public
- int
- M_NULL
- = 0x0
-
-
-
-
-
-
-
-
-
-
- M_QUIETZONE
-
-
-
-
-
-
-
- public
- int
- M_QUIETZONE
- = 0x12
-
-
-
-
-
-
-
-
-
-
- M_SEPARATOR
-
-
-
-
-
-
-
- public
- int
- M_SEPARATOR
- = 0x8
-
-
-
-
-
-
-
-
-
-
- M_TEST
-
-
-
-
-
-
-
- public
- int
- M_TEST
- = 0xff
-
-
-
-
-
-
-
-
-
-
- M_TIMING
-
-
-
-
-
-
-
- public
- int
- M_TIMING
- = 0xc
-
-
-
-
-
-
-
-
-
-
- M_VERSION
-
-
-
-
-
-
-
- public
- int
- M_VERSION
- = 0x10
-
-
-
-
-
-
-
-
-
-
- alignmentPattern
-
-
-
-
-
- ISO/IEC 18004:2000 Annex E, Table E.1 - Row/column coordinates of center module of Alignment Patterns
-
-
- protected
- array<string|int, array<string|int, int>>
- alignmentPattern
- = [1 => [], 2 => [6, 18], 3 => [6, 22], 4 => [6, 26], 5 => [6, 30], 6 => [6, 34], 7 => [6, 22, 38], 8 => [6, 24, 42], 9 => [6, 26, 46], 10 => [6, 28, 50], 11 => [6, 30, 54], 12 => [6, 32, 58], 13 => [6, 34, 62], 14 => [6, 26, 46, 66], 15 => [6, 26, 48, 70], 16 => [6, 26, 50, 74], 17 => [6, 30, 54, 78], 18 => [6, 30, 56, 82], 19 => [6, 30, 58, 86], 20 => [6, 34, 62, 90], 21 => [6, 28, 50, 72, 94], 22 => [6, 26, 50, 74, 98], 23 => [6, 30, 54, 78, 102], 24 => [6, 28, 54, 80, 106], 25 => [6, 32, 58, 84, 110], 26 => [6, 30, 58, 86, 114], 27 => [6, 34, 62, 90, 118], 28 => [6, 26, 50, 74, 98, 122], 29 => [6, 30, 54, 78, 102, 126], 30 => [6, 26, 52, 78, 104, 130], 31 => [6, 30, 56, 82, 108, 134], 32 => [6, 34, 60, 86, 112, 138], 33 => [6, 30, 58, 86, 114, 142], 34 => [6, 34, 62, 90, 118, 146], 35 => [6, 30, 54, 78, 102, 126, 150], 36 => [6, 24, 50, 76, 102, 128, 154], 37 => [6, 28, 54, 80, 106, 132, 158], 38 => [6, 32, 58, 84, 110, 136, 162], 39 => [6, 26, 54, 82, 110, 138, 166], 40 => [6, 30, 58, 86, 114, 142, 170]]
-
-
-
-
-
-
-
-
-
-
-
-
-
- ISO/IEC 18004:2000 Section 8.9 - Format Information
-
-
- protected
- array<string|int, array<string|int, int>>
- formatPattern
- = [[
- // L
- 0b111011111000100,
- 0b111001011110011,
- 0b111110110101010,
- 0b111100010011101,
- 0b110011000101111,
- 0b110001100011000,
- 0b110110001000001,
- 0b110100101110110,
-], [
- // M
- 0b101010000010010,
- 0b101000100100101,
- 0b101111001111100,
- 0b101101101001011,
- 0b100010111111001,
- 0b100000011001110,
- 0b100111110010111,
- 0b100101010100000,
-], [
- // Q
- 0b11010101011111,
- 0b11000001101000,
- 0b11111100110001,
- 0b11101000000110,
- 0b10010010110100,
- 0b10000110000011,
- 0b10111011011010,
- 0b10101111101101,
-], [
- // H
- 0b1011010001001,
- 0b1001110111110,
- 0b1110011100111,
- 0b1100111010000,
- 0b11101100010,
- 0b1001010101,
- 0b110100001100,
- 0b100000111011,
-]]
-
-
-
- ECC level -> mask pattern
-
-
-
-
-
-
-
- versionPattern
-
-
-
-
-
- ISO/IEC 18004:2000 Annex D, Table D.1 - Version information bit stream for each version
-
-
- protected
- array<string|int, int>
- versionPattern
- = [7 => 0b111110010010100, 8 => 0b1000010110111100, 9 => 0b1001101010011001, 10 => 0b1010010011010011, 11 => 0b1011101111110110, 12 => 0b1100011101100010, 13 => 0b1101100001000111, 14 => 0b1110011000001101, 15 => 0b1111100100101000, 16 => 0b10000101101111000, 17 => 0b10001010001011101, 18 => 0b10010101000010111, 19 => 0b10011010100110010, 20 => 0b10100100110100110, 21 => 0b10101011010000011, 22 => 0b10110100011001001, 23 => 0b10111011111101100, 24 => 0b11000111011000100, 25 => 0b11001000111100001, 26 => 0b11010111110101011, 27 => 0b11011000010001110, 28 => 0b11100110000011010, 29 => 0b11101001100111111, 30 => 0b11110110101110101, 31 => 0b11111001001010000, 32 => 0b100000100111010101, 33 => 0b100001011011110000, 34 => 0b100010100010111010, 35 => 0b100011011110011111, 36 => 0b100100101100001011, 37 => 0b100101010000101110, 38 => 0b100110101001100100, 39 => 0b100111010101000001, 40 => 0b101000110001101001]
-
-
-
- no version pattern for QR Codes < 7
-
-
-
-
-
-
-
-
-
-
-
-
- $eclevel
-
-
-
-
-
-
- the current ECC level
-
-
- protected
- int
- $eclevel
-
-
-
-
-
-
-
-
-
- $maskPattern
-
-
-
-
-
-
- the used mask pattern, set via QRMatrix::mapData()
-
-
- protected
- int
- $maskPattern
- = chillerlanQRCodeQRCode::MASK_PATTERN_AUTO
-
-
-
-
-
-
-
-
- $matrix
-
-
-
-
-
-
- the actual matrix data array
-
-
- protected
- array<string|int, mixed>
- $matrix
-
-
-
-
-
-
-
-
-
- $moduleCount
-
-
-
-
-
-
- the size (side length) of the matrix
-
-
- protected
- int
- $moduleCount
-
-
-
-
-
-
-
-
-
- $version
-
-
-
-
-
-
- the current QR Code version number
-
-
- protected
- int
- $version
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QRMatrix constructor.
-
-
- public
- __construct ( int $version , int $eclevel ) : mixed
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
- $eclevel
- : int
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- check()
-
-
-
-
- Checks whether a module is true (dark) or false (light)
-
-
- public
- check ( int $x , int $y ) : bool
-
- true => $value >> 8 === $M_TYPE
-$value >> 8 > 0
-false => $value === $M_TYPE
-$value >> 8 === 0
-
-
- Parameters
-
-
- $x
- : int
-
-
-
-
-
- $y
- : int
-
-
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- eccLevel()
-
-
-
-
- Returns the current ECC level
-
-
- public
- eccLevel ( ) : int
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- get()
-
-
-
-
- Returns the value of the module at position [$x, $y]
-
-
- public
- get ( int $x , int $y ) : int
-
-
-
- Parameters
-
-
- $x
- : int
-
-
-
-
-
- $y
- : int
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- init()
-
-
-
-
- shortcut to initialize the matrix
-
-
- public
- init ( int $maskPattern [ , bool $test = null ] ) : QRMatrix
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
- $test
- : bool
- = null
-
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- mapData()
-
-
-
-
- Maps the binary $data array from QRDataInterface::maskECC() on the matrix,
-masking the data using $maskPattern (ISO/IEC 18004:2000 Section 8.8)
-
-
- public
- mapData ( array<string|int, int> $data , int $maskPattern ) : QRMatrix
-
-
-
- Parameters
-
-
- $data
- : array<string|int, int>
-
-
-
-
-
-
- $maskPattern
- : int
-
-
-
-
-
-
-
-
-
-
-
- see
-
-
- QRDataAbstract::maskECC()
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- maskPattern()
-
-
-
-
- Returns the current mask pattern
-
-
- public
- maskPattern ( ) : int
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- matrix()
-
-
-
-
- Returns the data matrix, returns a pure boolean representation if $boolean is set to true
-
-
- public
- matrix ( [ bool $boolean = false ] ) : array<string|int, array<string|int, int>>|array<string|int, array<string|int, bool>>
-
-
-
- Parameters
-
-
- $boolean
- : bool
- = false
-
-
-
-
-
-
-
- Return values
- array<string|int, array<string|int, int>>|array<string|int, array<string|int, bool>>
- —
-
-
-
-
-
-
- set()
-
-
-
-
- Sets the $M_TYPE value for the module at position [$x, $y]
-
-
- public
- set ( int $x , int $y , bool $value , int $M_TYPE ) : QRMatrix
-
- true => $M_TYPE << 8
-false => $M_TYPE
-
-
- Parameters
-
-
- $x
- : int
-
-
-
-
-
- $y
- : int
-
-
-
-
-
- $value
- : bool
-
-
-
-
-
- $M_TYPE
- : int
-
-
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setAlignmentPattern()
-
-
-
-
- Draws the 5x5 alignment patterns
-
-
- public
- setAlignmentPattern ( ) : QRMatrix
-
- ISO/IEC 18004:2000 Section 7.3.5
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setDarkModule()
-
-
-
-
- Sets the "dark module", that is always on the same position 1x1px away from the bottom left finder
-
-
- public
- setDarkModule ( ) : QRMatrix
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setFinderPattern()
-
-
-
-
- Draws the 7x7 finder patterns in the corners top left/right and bottom left
-
-
- public
- setFinderPattern ( ) : QRMatrix
-
- ISO/IEC 18004:2000 Section 7.3.2
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
-
-
- Draws the format info along the finder patterns
-
-
- public
- setFormatInfo ( int $maskPattern [ , bool $test = null ] ) : QRMatrix
-
- ISO/IEC 18004:2000 Section 8.9
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
- $test
- : bool
- = null
-
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setLogoSpace()
-
-
-
-
- Clears a space of $width * $height in order to add a logo or text.
-
-
- public
- setLogoSpace ( int $width , int $height [ , int $startX = null ] [ , int $startY = null ] ) : QRMatrix
-
- Additionally, the logo space can be positioned within the QR Code - respecting the main functional patterns -
-using $startX and $startY. If either of these are null, the logo space will be centered in that direction.
-ECC level "H" (30%) is required.
-Please note that adding a logo space minimizes the error correction capacity of the QR Code and
-created images may become unreadable, especially when printed with a chance to receive damage.
-Please test thoroughly before using this feature in production.
-This method should be called from within an output module (after the matrix has been filled with data).
-Note that there is no restiction on how many times this method could be called on the same matrix instance.
-
-
- Parameters
-
-
- $width
- : int
-
-
-
-
-
- $height
- : int
-
-
-
-
-
- $startX
- : int
- = null
-
-
-
-
- $startY
- : int
- = null
-
-
-
-
-
-
-
-
-
- link
-
-
- https://github.com/chillerlan/php-qrcode/issues/52
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setQuietZone()
-
-
-
-
- Draws the "quiet zone" of $size around the matrix
-
-
- public
- setQuietZone ( [ int $size = null ] ) : QRMatrix
-
- ISO/IEC 18004:2000 Section 7.3.7
-
-
- Parameters
-
-
- $size
- : int
- = null
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setSeparators()
-
-
-
-
- Draws the separator lines around the finder patterns
-
-
- public
- setSeparators ( ) : QRMatrix
-
- ISO/IEC 18004:2000 Section 7.3.3
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setTimingPattern()
-
-
-
-
- Draws the timing pattern (h/v checkered line between the finder patterns)
-
-
- public
- setTimingPattern ( ) : QRMatrix
-
- ISO/IEC 18004:2000 Section 7.3.4
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- setVersionNumber()
-
-
-
-
- Draws the version information, 2x 3x6 pixel
-
-
- public
- setVersionNumber ( [ bool $test = null ] ) : QRMatrix
-
- ISO/IEC 18004:2000 Section 8.10
-
-
- Parameters
-
-
- $test
- : bool
- = null
-
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- size()
-
-
-
-
- Returns the absoulute size of the matrix, including quiet zone (after setting it).
-
-
- public
- size ( ) : int
-
- size = version * 4 + 17 [ + 2 * quietzone size]
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- version()
-
-
-
-
- Returns the current version number
-
-
- public
- version ( ) : int
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Helpers-BitBuffer.html b/classes/chillerlan-QRCode-Helpers-BitBuffer.html
deleted file mode 100644
index 9bb67ab3d..000000000
--- a/classes/chillerlan-QRCode-Helpers-BitBuffer.html
+++ /dev/null
@@ -1,467 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- BitBuffer
-
-
-
-
-
-
-
-
- Holds the raw binary data
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $buffer
-
- : array<string|int, mixed>
-
-The buffer content
-
-
- $length
-
- : int
-
-Length of the content (bits)
-
-
- clear()
-
- : BitBuffer
-
-clears the buffer
-
-
- getBuffer()
-
- : array<string|int, mixed>
-
-returns the buffer content
-
-
- getLength()
-
- : int
-
-returns the current buffer length
-
-
- put()
-
- : BitBuffer
-
-appends a sequence of bits
-
-
- putBit()
-
- : BitBuffer
-
-appends a single bit
-
-
-
-
-
-
-
-
-
-
-
-
- $buffer
-
-
-
-
-
-
- The buffer content
-
-
- protected
- array<string|int, mixed>
- $buffer
- = []
-
-
-
-
-
-
-
-
- $length
-
-
-
-
-
-
- Length of the content (bits)
-
-
- protected
- int
- $length
- = 0
-
-
-
-
-
-
-
-
-
-
-
-
- clear()
-
-
-
-
- clears the buffer
-
-
- public
- clear ( ) : BitBuffer
-
-
-
-
-
-
- Return values
- BitBuffer
- —
-
-
-
-
-
-
- getBuffer()
-
-
-
-
- returns the buffer content
-
-
- public
- getBuffer ( ) : array<string|int, mixed>
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- getLength()
-
-
-
-
- returns the current buffer length
-
-
- public
- getLength ( ) : int
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- put()
-
-
-
-
- appends a sequence of bits
-
-
- public
- put ( int $num , int $length ) : BitBuffer
-
-
-
- Parameters
-
-
- $num
- : int
-
-
-
-
-
- $length
- : int
-
-
-
-
-
-
-
-
- Return values
- BitBuffer
- —
-
-
-
-
-
-
- putBit()
-
-
-
-
- appends a single bit
-
-
- public
- putBit ( bool $bit ) : BitBuffer
-
-
-
- Parameters
-
-
- $bit
- : bool
-
-
-
-
-
-
-
-
- Return values
- BitBuffer
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Helpers-Polynomial.html b/classes/chillerlan-QRCode-Helpers-Polynomial.html
deleted file mode 100644
index c0222bcce..000000000
--- a/classes/chillerlan-QRCode-Helpers-Polynomial.html
+++ /dev/null
@@ -1,638 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Polynomial
-
-
-
-
-
-
-
-
- Polynomial long division helpers
-
-
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/error-correction-coding
-
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- table
-
- = [[1, 0], [2, 0], [4, 1], [8, 25], [16, 2], [32, 50], [64, 26], [128, 198], [29, 3], [58, 223], [116, 51], [232, 238], [205, 27], [135, 104], [19, 199], [38, 75], [76, 4], [152, 100], [45, 224], [90, 14], [180, 52], [117, 141], [234, 239], [201, 129], [143, 28], [3, 193], [6, 105], [12, 248], [24, 200], [48, 8], [96, 76], [192, 113], [157, 5], [39, 138], [78, 101], [156, 47], [37, 225], [74, 36], [148, 15], [53, 33], [106, 53], [212, 147], [181, 142], [119, 218], [238, 240], [193, 18], [159, 130], [35, 69], [70, 29], [140, 181], [5, 194], [10, 125], [20, 106], [40, 39], [80, 249], [160, 185], [93, 201], [186, 154], [105, 9], [210, 120], [185, 77], [111, 228], [222, 114], [161, 166], [95, 6], [190, 191], [97, 139], [194, 98], [153, 102], [47, 221], [94, 48], [188, 253], [101, 226], [202, 152], [137, 37], [15, 179], [30, 16], [60, 145], [120, 34], [240, 136], [253, 54], [231, 208], [211, 148], [187, 206], [107, 143], [214, 150], [177, 219], [127, 189], [254, 241], [225, 210], [223, 19], [163, 92], [91, 131], [182, 56], [113, 70], [226, 64], [217, 30], [175, 66], [67, 182], [134, 163], [17, 195], [34, 72], [68, 126], [136, 110], [13, 107], [26, 58], [52, 40], [104, 84], [208, 250], [189, 133], [103, 186], [206, 61], [129, 202], [31, 94], [62, 155], [124, 159], [248, 10], [237, 21], [199, 121], [147, 43], [59, 78], [118, 212], [236, 229], [197, 172], [151, 115], [51, 243], [102, 167], [204, 87], [133, 7], [23, 112], [46, 192], [92, 247], [184, 140], [109, 128], [218, 99], [169, 13], [79, 103], [158, 74], [33, 222], [66, 237], [132, 49], [21, 197], [42, 254], [84, 24], [168, 227], [77, 165], [154, 153], [41, 119], [82, 38], [164, 184], [85, 180], [170, 124], [73, 17], [146, 68], [57, 146], [114, 217], [228, 35], [213, 32], [183, 137], [115, 46], [230, 55], [209, 63], [191, 209], [99, 91], [198, 149], [145, 188], [63, 207], [126, 205], [252, 144], [229, 135], [215, 151], [179, 178], [123, 220], [246, 252], [241, 190], [255, 97], [227, 242], [219, 86], [171, 211], [75, 171], [150, 20], [49, 42], [98, 93], [196, 158], [149, 132], [55, 60], [110, 57], [220, 83], [165, 71], [87, 109], [174, 65], [65, 162], [130, 31], [25, 45], [50, 67], [100, 216], [200, 183], [141, 123], [7, 164], [14, 118], [28, 196], [56, 23], [112, 73], [224, 236], [221, 127], [167, 12], [83, 111], [166, 246], [81, 108], [162, 161], [89, 59], [178, 82], [121, 41], [242, 157], [249, 85], [239, 170], [195, 251], [155, 96], [43, 134], [86, 177], [172, 187], [69, 204], [138, 62], [9, 90], [18, 203], [36, 89], [72, 95], [144, 176], [61, 156], [122, 169], [244, 160], [245, 81], [247, 11], [243, 245], [251, 22], [235, 235], [203, 122], [139, 117], [11, 44], [22, 215], [44, 79], [88, 174], [176, 213], [125, 233], [250, 230], [233, 231], [207, 173], [131, 232], [27, 116], [54, 214], [108, 244], [216, 234], [173, 168], [71, 80], [142, 88], [1, 175]]
-
-
-
-
- $num
-
- : array<string|int, mixed>
-
-
-
-
- __construct()
-
- : mixed
-
-Polynomial constructor.
-
-
- getNum()
-
- : array<string|int, mixed>
-
-
-
-
- gexp()
-
- : int
-
-
-
-
- glog()
-
- : int
-
-
-
-
- mod()
-
- : Polynomial
-
-
-
-
- multiply()
-
- : Polynomial
-
-
-
-
- setNum()
-
- : Polynomial
-
-
-
-
-
-
-
-
-
-
-
-
- table
-
-
-
-
-
-
-
- protected
- mixed
- table
- = [[1, 0], [2, 0], [4, 1], [8, 25], [16, 2], [32, 50], [64, 26], [128, 198], [29, 3], [58, 223], [116, 51], [232, 238], [205, 27], [135, 104], [19, 199], [38, 75], [76, 4], [152, 100], [45, 224], [90, 14], [180, 52], [117, 141], [234, 239], [201, 129], [143, 28], [3, 193], [6, 105], [12, 248], [24, 200], [48, 8], [96, 76], [192, 113], [157, 5], [39, 138], [78, 101], [156, 47], [37, 225], [74, 36], [148, 15], [53, 33], [106, 53], [212, 147], [181, 142], [119, 218], [238, 240], [193, 18], [159, 130], [35, 69], [70, 29], [140, 181], [5, 194], [10, 125], [20, 106], [40, 39], [80, 249], [160, 185], [93, 201], [186, 154], [105, 9], [210, 120], [185, 77], [111, 228], [222, 114], [161, 166], [95, 6], [190, 191], [97, 139], [194, 98], [153, 102], [47, 221], [94, 48], [188, 253], [101, 226], [202, 152], [137, 37], [15, 179], [30, 16], [60, 145], [120, 34], [240, 136], [253, 54], [231, 208], [211, 148], [187, 206], [107, 143], [214, 150], [177, 219], [127, 189], [254, 241], [225, 210], [223, 19], [163, 92], [91, 131], [182, 56], [113, 70], [226, 64], [217, 30], [175, 66], [67, 182], [134, 163], [17, 195], [34, 72], [68, 126], [136, 110], [13, 107], [26, 58], [52, 40], [104, 84], [208, 250], [189, 133], [103, 186], [206, 61], [129, 202], [31, 94], [62, 155], [124, 159], [248, 10], [237, 21], [199, 121], [147, 43], [59, 78], [118, 212], [236, 229], [197, 172], [151, 115], [51, 243], [102, 167], [204, 87], [133, 7], [23, 112], [46, 192], [92, 247], [184, 140], [109, 128], [218, 99], [169, 13], [79, 103], [158, 74], [33, 222], [66, 237], [132, 49], [21, 197], [42, 254], [84, 24], [168, 227], [77, 165], [154, 153], [41, 119], [82, 38], [164, 184], [85, 180], [170, 124], [73, 17], [146, 68], [57, 146], [114, 217], [228, 35], [213, 32], [183, 137], [115, 46], [230, 55], [209, 63], [191, 209], [99, 91], [198, 149], [145, 188], [63, 207], [126, 205], [252, 144], [229, 135], [215, 151], [179, 178], [123, 220], [246, 252], [241, 190], [255, 97], [227, 242], [219, 86], [171, 211], [75, 171], [150, 20], [49, 42], [98, 93], [196, 158], [149, 132], [55, 60], [110, 57], [220, 83], [165, 71], [87, 109], [174, 65], [65, 162], [130, 31], [25, 45], [50, 67], [100, 216], [200, 183], [141, 123], [7, 164], [14, 118], [28, 196], [56, 23], [112, 73], [224, 236], [221, 127], [167, 12], [83, 111], [166, 246], [81, 108], [162, 161], [89, 59], [178, 82], [121, 41], [242, 157], [249, 85], [239, 170], [195, 251], [155, 96], [43, 134], [86, 177], [172, 187], [69, 204], [138, 62], [9, 90], [18, 203], [36, 89], [72, 95], [144, 176], [61, 156], [122, 169], [244, 160], [245, 81], [247, 11], [243, 245], [251, 22], [235, 235], [203, 122], [139, 117], [11, 44], [22, 215], [44, 79], [88, 174], [176, 213], [125, 233], [250, 230], [233, 231], [207, 173], [131, 232], [27, 116], [54, 214], [108, 244], [216, 234], [173, 168], [71, 80], [142, 88], [1, 175]]
-
-
-
-
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/log-antilog-table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $num
-
-
-
-
-
-
-
-
- protected
- array<string|int, mixed>
- $num
- = []
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- Polynomial constructor.
-
-
- public
- __construct ( [ array<string|int, mixed> $num = null ] [ , int $shift = null ] ) : mixed
-
-
-
- Parameters
-
-
- $num
- : array<string|int, mixed>
- = null
-
-
-
-
- $shift
- : int
- = null
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- getNum()
-
-
-
-
-
-
- public
- getNum ( ) : array<string|int, mixed>
-
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- gexp()
-
-
-
-
-
-
- public
- gexp ( int $n ) : int
-
-
-
- Parameters
-
-
- $n
- : int
-
-
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- glog()
-
-
-
-
-
-
- public
- glog ( int $n ) : int
-
-
-
- Parameters
-
-
- $n
- : int
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- int
- —
-
-
-
-
-
-
- mod()
-
-
-
-
-
-
- public
- mod ( array<string|int, int> $e ) : Polynomial
-
-
-
- Parameters
-
-
- $e
- : array<string|int, int>
-
-
-
-
-
-
-
-
-
- Return values
- Polynomial
- —
-
-
-
-
-
-
- multiply()
-
-
-
-
-
-
- public
- multiply ( array<string|int, int> $e ) : Polynomial
-
-
-
- Parameters
-
-
- $e
- : array<string|int, int>
-
-
-
-
-
-
-
-
-
- Return values
- Polynomial
- —
-
-
-
-
-
-
- setNum()
-
-
-
-
-
-
- public
- setNum ( array<string|int, int> $num [ , int|null $shift = null ] ) : Polynomial
-
-
-
- Parameters
-
-
- $num
- : array<string|int, int>
-
-
-
-
-
-
- $shift
- : int|null
- = null
-
-
-
-
-
-
-
-
- Return values
- Polynomial
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Output-QRCodeOutputException.html b/classes/chillerlan-QRCode-Output-QRCodeOutputException.html
deleted file mode 100644
index 96d5195f4..000000000
--- a/classes/chillerlan-QRCode-Output-QRCodeOutputException.html
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCodeOutputException
-
-
- extends QRCodeException
-
-
-
-
-
-
-
-
- An exception container
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Output-QRFpdf.html b/classes/chillerlan-QRCode-Output-QRFpdf.html
deleted file mode 100644
index ce7338eea..000000000
--- a/classes/chillerlan-QRCode-Output-QRFpdf.html
+++ /dev/null
@@ -1,809 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRFpdf
-
-
- extends QROutputAbstract
-
-
-
-
-
-
-
-
- QRFpdf output module (requires fpdf)
-
-
-
-
-
-
-
- see
-
-
- https://github.com/Setasign/FPDF
-
-
-
-
-
- see
-
-
- http://www.fpdf.org/
-
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $defaultMode
-
- : string
-
-the default output mode of the current output module
-
-
- $length
-
- : int
-
-the side length of the QR image (modules * scale)
-
-
- $matrix
-
- : QRMatrix
-
-the (filled) data matrix object
-
-
- $moduleCount
-
- : int
-
-the current size of the QR matrix
-
-
- $moduleValues
-
- : array<string|int, mixed>
-
-an (optional) array of color values for the several QR matrix parts
-
-
- $options
-
- : SettingsContainerInterface
-
-
-
-
- $outputMode
-
- : string
-
-the current output mode
-
-
- $scale
-
- : int
-
-the current scaling for a QR pixel
-
-
- __construct()
-
- : mixed
-
-QROutputAbstract constructor.
-
-
- dump()
-
- : string|FPDF
-
-generates the output, optionally dumps it to a file, and returns it
-
-
- saveToFile()
-
- : bool
-
-saves the qr data to a file
-
-
- setModuleValues()
-
- : void
-
-Sets the initial module values (clean-up & defaults)
-
-
-
-
-
-
-
-
-
-
-
-
- $defaultMode
-
-
-
-
-
-
- the default output mode of the current output module
-
-
- protected
- string
- $defaultMode
-
-
-
-
-
-
-
-
-
- $length
-
-
-
-
-
-
- the side length of the QR image (modules * scale)
-
-
- protected
- int
- $length
-
-
-
-
-
-
-
-
-
- $matrix
-
-
-
-
-
-
- the (filled) data matrix object
-
-
- protected
- QRMatrix
- $matrix
-
-
-
-
-
-
-
-
-
- $moduleCount
-
-
-
-
-
-
- the current size of the QR matrix
-
-
- protected
- int
- $moduleCount
-
-
-
-
-
-
-
-
- see
-
-
- QRMatrix::size()
-
-
-
-
-
-
-
-
-
- $moduleValues
-
-
-
-
-
-
- an (optional) array of color values for the several QR matrix parts
-
-
- protected
- array<string|int, mixed>
- $moduleValues
-
-
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $outputMode
-
-
-
-
-
-
- the current output mode
-
-
- protected
- string
- $outputMode
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$outputType
-
-
-
-
-
-
-
-
-
- $scale
-
-
-
-
-
-
- the current scaling for a QR pixel
-
-
- protected
- int
- $scale
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$scale
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QROutputAbstract constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options , QRMatrix $matrix ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $matrix
- : QRMatrix
-
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- dump()
-
-
-
-
- generates the output, optionally dumps it to a file, and returns it
-
-
- public
- dump ( [ string $file = null ] ) : string|FPDF
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- string|FPDF
- —
-
-
-
-
-
-
- saveToFile()
-
-
-
-
- saves the qr data to a file
-
-
- protected
- saveToFile ( string $data , string $file ) : bool
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
- $file
- : string
-
-
-
-
-
-
-
-
-
-
- see
-
-
- file_put_contents()
-
-
-
-
-
- see
-
-
- QROptions::cachefile
-
-
-
-
-
- throws
-
-
- QRCodeOutputException
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- setModuleValues()
-
-
-
-
- Sets the initial module values (clean-up & defaults)
-
-
- protected
- setModuleValues ( ) : void
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Output-QRImage.html b/classes/chillerlan-QRCode-Output-QRImage.html
deleted file mode 100644
index a932caa15..000000000
--- a/classes/chillerlan-QRCode-Output-QRImage.html
+++ /dev/null
@@ -1,1179 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRImage
-
-
- extends QROutputAbstract
-
-
-
-
-
-
-
-
- Converts the matrix into GD images, raw or base64 output (requires ext-gd)
-
-
-
-
-
-
-
- see
-
-
- http://php.net/manual/book.image.php
-
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- TRANSPARENCY_TYPES
-
- = [chillerlanQRCodeQRCode::OUTPUT_IMAGE_PNG, chillerlanQRCodeQRCode::OUTPUT_IMAGE_GIF]
-
-GD image types that support transparency
-
-
- $defaultMode
-
- : string
-
-the default output mode of the current output module
-
-
- $image
-
- : resource|GdImage
-
-The GD image resource
-
-
- $length
-
- : int
-
-the side length of the QR image (modules * scale)
-
-
- $matrix
-
- : QRMatrix
-
-the (filled) data matrix object
-
-
- $moduleCount
-
- : int
-
-the current size of the QR matrix
-
-
- $moduleValues
-
- : array<string|int, mixed>
-
-an (optional) array of color values for the several QR matrix parts
-
-
- $options
-
- : SettingsContainerInterface
-
-
-
-
- $outputMode
-
- : string
-
-the current output mode
-
-
- $scale
-
- : int
-
-the current scaling for a QR pixel
-
-
- __construct()
-
- : mixed
-
-QROutputAbstract constructor.
-
-
- dump()
-
- : string|resource|GdImage
-
-generates the output, optionally dumps it to a file, and returns it
-
-
- dumpImage()
-
- : string
-
-Creates the final image by calling the desired GD output function
-
-
- gif()
-
- : void
-
-Jiff - like... JitHub!
-
-
- jpg()
-
- : void
-
-JPG output
-
-
- png()
-
- : void
-
-PNG output
-
-
- saveToFile()
-
- : bool
-
-saves the qr data to a file
-
-
- setModuleValues()
-
- : void
-
-Sets the initial module values (clean-up & defaults)
-
-
- setPixel()
-
- : void
-
-Creates a single QR pixel with the given settings
-
-
-
-
-
-
-
-
-
-
- TRANSPARENCY_TYPES
-
-
-
-
-
- GD image types that support transparency
-
-
- protected
- array<string|int, string>
- TRANSPARENCY_TYPES
- = [chillerlanQRCodeQRCode::OUTPUT_IMAGE_PNG, chillerlanQRCodeQRCode::OUTPUT_IMAGE_GIF]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $defaultMode
-
-
-
-
-
-
- the default output mode of the current output module
-
-
- protected
- string
- $defaultMode
- = chillerlanQRCodeQRCode::OUTPUT_IMAGE_PNG
-
-
-
-
-
-
-
-
- $image
-
-
-
-
-
-
- The GD image resource
-
-
- protected
- resource|GdImage
- $image
-
-
-
-
-
-
-
-
- see
-
-
- imagecreatetruecolor()
-
-
-
-
-
- phan-suppress
-
-
-
- PhanUndeclaredTypeProperty
-
-
-
-
-
-
-
-
- $length
-
-
-
-
-
-
- the side length of the QR image (modules * scale)
-
-
- protected
- int
- $length
-
-
-
-
-
-
-
-
-
- $matrix
-
-
-
-
-
-
- the (filled) data matrix object
-
-
- protected
- QRMatrix
- $matrix
-
-
-
-
-
-
-
-
-
- $moduleCount
-
-
-
-
-
-
- the current size of the QR matrix
-
-
- protected
- int
- $moduleCount
-
-
-
-
-
-
-
-
- see
-
-
- QRMatrix::size()
-
-
-
-
-
-
-
-
-
- $moduleValues
-
-
-
-
-
-
- an (optional) array of color values for the several QR matrix parts
-
-
- protected
- array<string|int, mixed>
- $moduleValues
-
-
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $outputMode
-
-
-
-
-
-
- the current output mode
-
-
- protected
- string
- $outputMode
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$outputType
-
-
-
-
-
-
-
-
-
- $scale
-
-
-
-
-
-
- the current scaling for a QR pixel
-
-
- protected
- int
- $scale
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$scale
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QROutputAbstract constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options , QRMatrix $matrix ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $matrix
- : QRMatrix
-
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- dump()
-
-
-
-
- generates the output, optionally dumps it to a file, and returns it
-
-
- public
- dump ( [ string $file = null ] ) : string|resource|GdImage
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
- phan-suppress
-
-
-
- PhanUndeclaredTypeReturnType, PhanTypeMismatchReturn
-
-
-
-
-
- Return values
- string|resource|GdImage
- —
-
-
-
-
-
-
- dumpImage()
-
-
-
-
- Creates the final image by calling the desired GD output function
-
-
- protected
- dumpImage ( ) : string
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeOutputException
-
-
-
-
-
-
- Return values
- string
- —
-
-
-
-
-
-
- gif()
-
-
-
-
- Jiff - like... JitHub!
-
-
- protected
- gif ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- jpg()
-
-
-
-
- JPG output
-
-
- protected
- jpg ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- png()
-
-
-
-
- PNG output
-
-
- protected
- png ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- saveToFile()
-
-
-
-
- saves the qr data to a file
-
-
- protected
- saveToFile ( string $data , string $file ) : bool
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
- $file
- : string
-
-
-
-
-
-
-
-
-
-
- see
-
-
- file_put_contents()
-
-
-
-
-
- see
-
-
- QROptions::cachefile
-
-
-
-
-
- throws
-
-
- QRCodeOutputException
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- setModuleValues()
-
-
-
-
- Sets the initial module values (clean-up & defaults)
-
-
- protected
- setModuleValues ( ) : void
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- setPixel()
-
-
-
-
- Creates a single QR pixel with the given settings
-
-
- protected
- setPixel ( int $x , int $y , array<string|int, mixed> $rgb ) : void
-
-
-
- Parameters
-
-
- $x
- : int
-
-
-
-
-
- $y
- : int
-
-
-
-
-
- $rgb
- : array<string|int, mixed>
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Output-QRImagick.html b/classes/chillerlan-QRCode-Output-QRImagick.html
deleted file mode 100644
index c07d4cb04..000000000
--- a/classes/chillerlan-QRCode-Output-QRImagick.html
+++ /dev/null
@@ -1,901 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRImagick
-
-
- extends QROutputAbstract
-
-
-
-
-
-
-
-
- ImageMagick output module (requires ext-imagick)
-
-
-
-
-
-
-
- see
-
-
- http://php.net/manual/book.imagick.php
-
-
-
-
-
- see
-
-
- http://phpimagick.com
-
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $defaultMode
-
- : string
-
-the default output mode of the current output module
-
-
- $imagick
-
- : Imagick
-
-
-
-
- $length
-
- : int
-
-the side length of the QR image (modules * scale)
-
-
- $matrix
-
- : QRMatrix
-
-the (filled) data matrix object
-
-
- $moduleCount
-
- : int
-
-the current size of the QR matrix
-
-
- $moduleValues
-
- : array<string|int, mixed>
-
-an (optional) array of color values for the several QR matrix parts
-
-
- $options
-
- : SettingsContainerInterface
-
-
-
-
- $outputMode
-
- : string
-
-the current output mode
-
-
- $scale
-
- : int
-
-the current scaling for a QR pixel
-
-
- __construct()
-
- : mixed
-
-QROutputAbstract constructor.
-
-
- dump()
-
- : string|Imagick
-
-generates the output, optionally dumps it to a file, and returns it
-
-
- drawImage()
-
- : void
-
-Creates the QR image via ImagickDraw
-
-
- saveToFile()
-
- : bool
-
-saves the qr data to a file
-
-
- setModuleValues()
-
- : void
-
-Sets the initial module values (clean-up & defaults)
-
-
-
-
-
-
-
-
-
-
-
-
- $defaultMode
-
-
-
-
-
-
- the default output mode of the current output module
-
-
- protected
- string
- $defaultMode
-
-
-
-
-
-
-
-
-
- $imagick
-
-
-
-
-
-
-
-
- protected
- Imagick
- $imagick
-
-
-
-
-
-
-
-
- $length
-
-
-
-
-
-
- the side length of the QR image (modules * scale)
-
-
- protected
- int
- $length
-
-
-
-
-
-
-
-
-
- $matrix
-
-
-
-
-
-
- the (filled) data matrix object
-
-
- protected
- QRMatrix
- $matrix
-
-
-
-
-
-
-
-
-
- $moduleCount
-
-
-
-
-
-
- the current size of the QR matrix
-
-
- protected
- int
- $moduleCount
-
-
-
-
-
-
-
-
- see
-
-
- QRMatrix::size()
-
-
-
-
-
-
-
-
-
- $moduleValues
-
-
-
-
-
-
- an (optional) array of color values for the several QR matrix parts
-
-
- protected
- array<string|int, mixed>
- $moduleValues
-
-
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $outputMode
-
-
-
-
-
-
- the current output mode
-
-
- protected
- string
- $outputMode
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$outputType
-
-
-
-
-
-
-
-
-
- $scale
-
-
-
-
-
-
- the current scaling for a QR pixel
-
-
- protected
- int
- $scale
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$scale
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QROutputAbstract constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options , QRMatrix $matrix ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $matrix
- : QRMatrix
-
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- dump()
-
-
-
-
- generates the output, optionally dumps it to a file, and returns it
-
-
- public
- dump ( [ string $file = null ] ) : string|Imagick
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- string|Imagick
- —
-
-
-
-
-
-
- drawImage()
-
-
-
-
- Creates the QR image via ImagickDraw
-
-
- protected
- drawImage ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- saveToFile()
-
-
-
-
- saves the qr data to a file
-
-
- protected
- saveToFile ( string $data , string $file ) : bool
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
- $file
- : string
-
-
-
-
-
-
-
-
-
-
- see
-
-
- file_put_contents()
-
-
-
-
-
- see
-
-
- QROptions::cachefile
-
-
-
-
-
- throws
-
-
- QRCodeOutputException
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- setModuleValues()
-
-
-
-
- Sets the initial module values (clean-up & defaults)
-
-
- protected
- setModuleValues ( ) : void
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Output-QRMarkup.html b/classes/chillerlan-QRCode-Output-QRMarkup.html
deleted file mode 100644
index eebda31a7..000000000
--- a/classes/chillerlan-QRCode-Output-QRMarkup.html
+++ /dev/null
@@ -1,956 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRMarkup
-
-
- extends QROutputAbstract
-
-
-
-
-
-
-
-
- Converts the matrix into markup types: HTML, SVG, .
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $defaultMode
-
- : string
-
-the default output mode of the current output module
-
-
- $length
-
- : int
-
-the side length of the QR image (modules * scale)
-
-
- $matrix
-
- : QRMatrix
-
-the (filled) data matrix object
-
-
- $moduleCount
-
- : int
-
-the current size of the QR matrix
-
-
- $moduleValues
-
- : array<string|int, mixed>
-
-an (optional) array of color values for the several QR matrix parts
-
-
- $options
-
- : SettingsContainerInterface
-
-
-
-
- $outputMode
-
- : string
-
-the current output mode
-
-
- $scale
-
- : int
-
-the current scaling for a QR pixel
-
-
- $svgHeader
-
- : string
-
-
-
-
- __construct()
-
- : mixed
-
-QROutputAbstract constructor.
-
-
- dump()
-
- : mixed
-
-generates the output, optionally dumps it to a file, and returns it
-
-
- html()
-
- : string
-
-HTML output
-
-
- saveToFile()
-
- : bool
-
-saves the qr data to a file
-
-
- setModuleValues()
-
- : void
-
-Sets the initial module values (clean-up & defaults)
-
-
- svg()
-
- : string
-
-SVG output
-
-
-
-
-
-
-
-
-
-
-
-
- $defaultMode
-
-
-
-
-
-
- the default output mode of the current output module
-
-
- protected
- string
- $defaultMode
- = chillerlanQRCodeQRCode::OUTPUT_MARKUP_SVG
-
-
-
-
-
-
-
-
- $length
-
-
-
-
-
-
- the side length of the QR image (modules * scale)
-
-
- protected
- int
- $length
-
-
-
-
-
-
-
-
-
- $matrix
-
-
-
-
-
-
- the (filled) data matrix object
-
-
- protected
- QRMatrix
- $matrix
-
-
-
-
-
-
-
-
-
- $moduleCount
-
-
-
-
-
-
- the current size of the QR matrix
-
-
- protected
- int
- $moduleCount
-
-
-
-
-
-
-
-
- see
-
-
- QRMatrix::size()
-
-
-
-
-
-
-
-
-
- $moduleValues
-
-
-
-
-
-
- an (optional) array of color values for the several QR matrix parts
-
-
- protected
- array<string|int, mixed>
- $moduleValues
-
-
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $outputMode
-
-
-
-
-
-
- the current output mode
-
-
- protected
- string
- $outputMode
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$outputType
-
-
-
-
-
-
-
-
-
- $scale
-
-
-
-
-
-
- the current scaling for a QR pixel
-
-
- protected
- int
- $scale
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$scale
-
-
-
-
-
-
-
-
-
-
-
-
-
- protected
- string
- $svgHeader
- = '<svg xmlns="http://www.w3.org/2000/svg" class="qr-svg %1$s" ' . 'style="width: 100%%; height: auto;" viewBox="0 0 %2$d %2$d">'
-
-
-
-
-
-
-
- see
-
-
- sprintf()
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QROutputAbstract constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options , QRMatrix $matrix ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $matrix
- : QRMatrix
-
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- dump()
-
-
-
-
- generates the output, optionally dumps it to a file, and returns it
-
-
- public
- dump ( [ string $file = null ] ) : mixed
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- html()
-
-
-
-
- HTML output
-
-
- protected
- html ( [ string $file = null ] ) : string
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
- Return values
- string
- —
-
-
-
-
-
-
- saveToFile()
-
-
-
-
- saves the qr data to a file
-
-
- protected
- saveToFile ( string $data , string $file ) : bool
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
- $file
- : string
-
-
-
-
-
-
-
-
-
-
- see
-
-
- file_put_contents()
-
-
-
-
-
- see
-
-
- QROptions::cachefile
-
-
-
-
-
- throws
-
-
- QRCodeOutputException
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- setModuleValues()
-
-
-
-
- Sets the initial module values (clean-up & defaults)
-
-
- protected
- setModuleValues ( ) : void
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- svg()
-
-
-
-
- SVG output
-
-
- protected
- svg ( [ string $file = null ] ) : string
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
-
-
- see
-
-
- https://github.com/codemasher/php-qrcode/pull/5
-
-
-
-
-
-
- Return values
- string
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Output-QROutputAbstract.html b/classes/chillerlan-QRCode-Output-QROutputAbstract.html
deleted file mode 100644
index ad96f9a41..000000000
--- a/classes/chillerlan-QRCode-Output-QROutputAbstract.html
+++ /dev/null
@@ -1,782 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROutputAbstract
-
-
-
-
- implements
- QROutputInterface
-
-
-
-
-
- common output abstract
-
-
-
-
-
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
- QROutputInterface
- Converts the data matrix into readable output
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $defaultMode
-
- : string
-
-the default output mode of the current output module
-
-
- $length
-
- : int
-
-the side length of the QR image (modules * scale)
-
-
- $matrix
-
- : QRMatrix
-
-the (filled) data matrix object
-
-
- $moduleCount
-
- : int
-
-the current size of the QR matrix
-
-
- $moduleValues
-
- : array<string|int, mixed>
-
-an (optional) array of color values for the several QR matrix parts
-
-
- $options
-
- : SettingsContainerInterface
-
-
-
-
- $outputMode
-
- : string
-
-the current output mode
-
-
- $scale
-
- : int
-
-the current scaling for a QR pixel
-
-
- __construct()
-
- : mixed
-
-QROutputAbstract constructor.
-
-
- dump()
-
- : mixed
-
-generates the output, optionally dumps it to a file, and returns it
-
-
- saveToFile()
-
- : bool
-
-saves the qr data to a file
-
-
- setModuleValues()
-
- : void
-
-Sets the initial module values (clean-up & defaults)
-
-
-
-
-
-
-
-
-
-
-
-
- $defaultMode
-
-
-
-
-
-
- the default output mode of the current output module
-
-
- protected
- string
- $defaultMode
-
-
-
-
-
-
-
-
-
- $length
-
-
-
-
-
-
- the side length of the QR image (modules * scale)
-
-
- protected
- int
- $length
-
-
-
-
-
-
-
-
-
- $matrix
-
-
-
-
-
-
- the (filled) data matrix object
-
-
- protected
- QRMatrix
- $matrix
-
-
-
-
-
-
-
-
-
- $moduleCount
-
-
-
-
-
-
- the current size of the QR matrix
-
-
- protected
- int
- $moduleCount
-
-
-
-
-
-
-
-
- see
-
-
- QRMatrix::size()
-
-
-
-
-
-
-
-
-
- $moduleValues
-
-
-
-
-
-
- an (optional) array of color values for the several QR matrix parts
-
-
- protected
- array<string|int, mixed>
- $moduleValues
-
-
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $outputMode
-
-
-
-
-
-
- the current output mode
-
-
- protected
- string
- $outputMode
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$outputType
-
-
-
-
-
-
-
-
-
- $scale
-
-
-
-
-
-
- the current scaling for a QR pixel
-
-
- protected
- int
- $scale
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$scale
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QROutputAbstract constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options , QRMatrix $matrix ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $matrix
- : QRMatrix
-
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- dump()
-
-
-
-
- generates the output, optionally dumps it to a file, and returns it
-
-
- public
- dump ( [ string $file = null ] ) : mixed
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- saveToFile()
-
-
-
-
- saves the qr data to a file
-
-
- protected
- saveToFile ( string $data , string $file ) : bool
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
- $file
- : string
-
-
-
-
-
-
-
-
-
-
- see
-
-
- file_put_contents()
-
-
-
-
-
- see
-
-
- QROptions::cachefile
-
-
-
-
-
- throws
-
-
- QRCodeOutputException
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- setModuleValues()
-
-
-
-
- Sets the initial module values (clean-up & defaults)
-
-
- protected
- abstract setModuleValues ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Output-QROutputInterface.html b/classes/chillerlan-QRCode-Output-QROutputInterface.html
deleted file mode 100644
index 93e7041e7..000000000
--- a/classes/chillerlan-QRCode-Output-QROutputInterface.html
+++ /dev/null
@@ -1,318 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROutputInterface
-
-
-
-
- Converts the data matrix into readable output
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- DEFAULT_MODULE_VALUES
-
- = [
- // light
- chillerlanQRCodeDataQRMatrix::M_NULL => false,
- // 0
- chillerlanQRCodeDataQRMatrix::M_DATA => false,
- // 4
- chillerlanQRCodeDataQRMatrix::M_FINDER => false,
- // 6
- chillerlanQRCodeDataQRMatrix::M_SEPARATOR => false,
- // 8
- chillerlanQRCodeDataQRMatrix::M_ALIGNMENT => false,
- // 10
- chillerlanQRCodeDataQRMatrix::M_TIMING => false,
- // 12
- chillerlanQRCodeDataQRMatrix::M_FORMAT => false,
- // 14
- chillerlanQRCodeDataQRMatrix::M_VERSION => false,
- // 16
- chillerlanQRCodeDataQRMatrix::M_QUIETZONE => false,
- // 18
- chillerlanQRCodeDataQRMatrix::M_LOGO => false,
- // 20
- chillerlanQRCodeDataQRMatrix::M_TEST => false,
- // 255
- // dark
- chillerlanQRCodeDataQRMatrix::M_DARKMODULE << 8 => true,
- // 512
- chillerlanQRCodeDataQRMatrix::M_DATA << 8 => true,
- // 1024
- chillerlanQRCodeDataQRMatrix::M_FINDER << 8 => true,
- // 1536
- chillerlanQRCodeDataQRMatrix::M_ALIGNMENT << 8 => true,
- // 2560
- chillerlanQRCodeDataQRMatrix::M_TIMING << 8 => true,
- // 3072
- chillerlanQRCodeDataQRMatrix::M_FORMAT << 8 => true,
- // 3584
- chillerlanQRCodeDataQRMatrix::M_VERSION << 8 => true,
- // 4096
- chillerlanQRCodeDataQRMatrix::M_FINDER_DOT << 8 => true,
- // 5632
- chillerlanQRCodeDataQRMatrix::M_TEST << 8 => true,
-]
-
-
-
-
- dump()
-
- : mixed
-
-generates the output, optionally dumps it to a file, and returns it
-
-
-
-
-
-
-
-
-
-
- DEFAULT_MODULE_VALUES
-
-
-
-
-
-
-
- public
- mixed
- DEFAULT_MODULE_VALUES
- = [
- // light
- chillerlanQRCodeDataQRMatrix::M_NULL => false,
- // 0
- chillerlanQRCodeDataQRMatrix::M_DATA => false,
- // 4
- chillerlanQRCodeDataQRMatrix::M_FINDER => false,
- // 6
- chillerlanQRCodeDataQRMatrix::M_SEPARATOR => false,
- // 8
- chillerlanQRCodeDataQRMatrix::M_ALIGNMENT => false,
- // 10
- chillerlanQRCodeDataQRMatrix::M_TIMING => false,
- // 12
- chillerlanQRCodeDataQRMatrix::M_FORMAT => false,
- // 14
- chillerlanQRCodeDataQRMatrix::M_VERSION => false,
- // 16
- chillerlanQRCodeDataQRMatrix::M_QUIETZONE => false,
- // 18
- chillerlanQRCodeDataQRMatrix::M_LOGO => false,
- // 20
- chillerlanQRCodeDataQRMatrix::M_TEST => false,
- // 255
- // dark
- chillerlanQRCodeDataQRMatrix::M_DARKMODULE << 8 => true,
- // 512
- chillerlanQRCodeDataQRMatrix::M_DATA << 8 => true,
- // 1024
- chillerlanQRCodeDataQRMatrix::M_FINDER << 8 => true,
- // 1536
- chillerlanQRCodeDataQRMatrix::M_ALIGNMENT << 8 => true,
- // 2560
- chillerlanQRCodeDataQRMatrix::M_TIMING << 8 => true,
- // 3072
- chillerlanQRCodeDataQRMatrix::M_FORMAT << 8 => true,
- // 3584
- chillerlanQRCodeDataQRMatrix::M_VERSION << 8 => true,
- // 4096
- chillerlanQRCodeDataQRMatrix::M_FINDER_DOT << 8 => true,
- // 5632
- chillerlanQRCodeDataQRMatrix::M_TEST << 8 => true,
-]
-
-
-
-
-
-
-
-
-
-
-
-
-
- dump()
-
-
-
-
- generates the output, optionally dumps it to a file, and returns it
-
-
- public
- dump ( [ string $file = null ] ) : mixed
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-Output-QRString.html b/classes/chillerlan-QRCode-Output-QRString.html
deleted file mode 100644
index 2b17ae17b..000000000
--- a/classes/chillerlan-QRCode-Output-QRString.html
+++ /dev/null
@@ -1,887 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRString
-
-
- extends QROutputAbstract
-
-
-
-
-
-
-
-
- Converts the matrix data into string types
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $defaultMode
-
- : string
-
-the default output mode of the current output module
-
-
- $length
-
- : int
-
-the side length of the QR image (modules * scale)
-
-
- $matrix
-
- : QRMatrix
-
-the (filled) data matrix object
-
-
- $moduleCount
-
- : int
-
-the current size of the QR matrix
-
-
- $moduleValues
-
- : array<string|int, mixed>
-
-an (optional) array of color values for the several QR matrix parts
-
-
- $options
-
- : SettingsContainerInterface
-
-
-
-
- $outputMode
-
- : string
-
-the current output mode
-
-
- $scale
-
- : int
-
-the current scaling for a QR pixel
-
-
- __construct()
-
- : mixed
-
-QROutputAbstract constructor.
-
-
- dump()
-
- : mixed
-
-generates the output, optionally dumps it to a file, and returns it
-
-
- json()
-
- : string
-
-JSON output
-
-
- saveToFile()
-
- : bool
-
-saves the qr data to a file
-
-
- setModuleValues()
-
- : void
-
-Sets the initial module values (clean-up & defaults)
-
-
- text()
-
- : string
-
-string output
-
-
-
-
-
-
-
-
-
-
-
-
- $defaultMode
-
-
-
-
-
-
- the default output mode of the current output module
-
-
- protected
- string
- $defaultMode
- = chillerlanQRCodeQRCode::OUTPUT_STRING_TEXT
-
-
-
-
-
-
-
-
- $length
-
-
-
-
-
-
- the side length of the QR image (modules * scale)
-
-
- protected
- int
- $length
-
-
-
-
-
-
-
-
-
- $matrix
-
-
-
-
-
-
- the (filled) data matrix object
-
-
- protected
- QRMatrix
- $matrix
-
-
-
-
-
-
-
-
-
- $moduleCount
-
-
-
-
-
-
- the current size of the QR matrix
-
-
- protected
- int
- $moduleCount
-
-
-
-
-
-
-
-
- see
-
-
- QRMatrix::size()
-
-
-
-
-
-
-
-
-
- $moduleValues
-
-
-
-
-
-
- an (optional) array of color values for the several QR matrix parts
-
-
- protected
- array<string|int, mixed>
- $moduleValues
-
-
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
- $outputMode
-
-
-
-
-
-
- the current output mode
-
-
- protected
- string
- $outputMode
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$outputType
-
-
-
-
-
-
-
-
-
- $scale
-
-
-
-
-
-
- the current scaling for a QR pixel
-
-
- protected
- int
- $scale
-
-
-
-
-
-
-
-
- see
-
-
- QROptions::$scale
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QROutputAbstract constructor.
-
-
- public
- __construct ( SettingsContainerInterface $options , QRMatrix $matrix ) : mixed
-
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
-
-
-
-
-
- $matrix
- : QRMatrix
-
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- dump()
-
-
-
-
- generates the output, optionally dumps it to a file, and returns it
-
-
- public
- dump ( [ string $file = null ] ) : mixed
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- json()
-
-
-
-
- JSON output
-
-
- protected
- json ( [ string $file = null ] ) : string
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
- Return values
- string
- —
-
-
-
-
-
-
- saveToFile()
-
-
-
-
- saves the qr data to a file
-
-
- protected
- saveToFile ( string $data , string $file ) : bool
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
- $file
- : string
-
-
-
-
-
-
-
-
-
-
- see
-
-
- file_put_contents()
-
-
-
-
-
- see
-
-
- QROptions::cachefile
-
-
-
-
-
- throws
-
-
- QRCodeOutputException
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- setModuleValues()
-
-
-
-
- Sets the initial module values (clean-up & defaults)
-
-
- protected
- setModuleValues ( ) : void
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- text()
-
-
-
-
- string output
-
-
- protected
- text ( [ string $file = null ] ) : string
-
-
-
- Parameters
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
- Return values
- string
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-QRCode.html b/classes/chillerlan-QRCode-QRCode.html
deleted file mode 100644
index 26f39e132..000000000
--- a/classes/chillerlan-QRCode-QRCode.html
+++ /dev/null
@@ -1,1705 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCode
-
-
-
-
-
-
-
-
- Turns a text string into a Model 2 QR Code
-
-
-
-
-
-
-
- see
-
-
- https://github.com/kazuhikoarase/qrcode-generator/tree/master/php
-
-
-
-
-
- see
-
-
- http://www.qrcode.com/en/codes/model12.html
-
-
-
-
-
- see
-
-
- https://www.swisseduc.ch/informatik/theoretische_informatik/qr_codes/docs/qr_standard.pdf
-
-
-
-
-
- see
-
-
- https://en.wikipedia.org/wiki/QR_code
-
-
-
-
-
- see
-
-
- http://www.thonky.com/qr-code-tutorial/
-
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- DATA_ALPHANUM
-
- = 0b10
-
-
-
-
- DATA_BYTE
-
- = 0b100
-
-
-
-
- DATA_KANJI
-
- = 0b1000
-
-
-
-
- DATA_MODES
-
- = [self::DATA_NUMBER => 0, self::DATA_ALPHANUM => 1, self::DATA_BYTE => 2, self::DATA_KANJI => 3]
-
-References to the keys of the following tables:
-
-
- DATA_NUMBER
-
- = 0b1
-
-
-
-
- ECC_H
-
- = 0b10
-
-
-
-
- ECC_L
-
- = 0b1
-
-
-
-
- ECC_M
-
- = 0b0
-
-
-
-
- ECC_MODES
-
- = [self::ECC_L => 0, self::ECC_M => 1, self::ECC_Q => 2, self::ECC_H => 3]
-
-References to the keys of the following tables:
-
-
- ECC_Q
-
- = 0b11
-
-
-
-
- MASK_PATTERN_AUTO
-
- = -1
-
-
-
-
- OUTPUT_CUSTOM
-
- = 'custom'
-
-
-
-
- OUTPUT_FPDF
-
- = 'fpdf'
-
-
-
-
- OUTPUT_IMAGE_GIF
-
- = 'gif'
-
-
-
-
- OUTPUT_IMAGE_JPG
-
- = 'jpg'
-
-
-
-
- OUTPUT_IMAGE_PNG
-
- = 'png'
-
-
-
-
- OUTPUT_IMAGICK
-
- = 'imagick'
-
-
-
-
- OUTPUT_MARKUP_HTML
-
- = 'html'
-
-
-
-
- OUTPUT_MARKUP_SVG
-
- = 'svg'
-
-
-
-
- OUTPUT_MODES
-
- = [chillerlanQRCodeOutputQRMarkup::class => [self::OUTPUT_MARKUP_SVG, self::OUTPUT_MARKUP_HTML], chillerlanQRCodeOutputQRImage::class => [self::OUTPUT_IMAGE_PNG, self::OUTPUT_IMAGE_GIF, self::OUTPUT_IMAGE_JPG], chillerlanQRCodeOutputQRString::class => [self::OUTPUT_STRING_JSON, self::OUTPUT_STRING_TEXT], chillerlanQRCodeOutputQRImagick::class => [self::OUTPUT_IMAGICK], chillerlanQRCodeOutputQRFpdf::class => [self::OUTPUT_FPDF]]
-
-Map of built-in output modules => capabilities
-
-
- OUTPUT_STRING_JSON
-
- = 'json'
-
-
-
-
- OUTPUT_STRING_TEXT
-
- = 'text'
-
-
-
-
- VERSION_AUTO
-
- = -1
-
-
-
-
- DATA_INTERFACES
-
- = ['number' => chillerlanQRCodeDataNumber::class, 'alphanum' => chillerlanQRCodeDataAlphaNum::class, 'kanji' => chillerlanQRCodeDataKanji::class, 'byte' => chillerlanQRCodeDataByte::class]
-
-Map of data mode => interface
-
-
- $dataInterface
-
- : QRDataInterface
-
-The selected data interface (Number, AlphaNum, Kanji, Byte)
-
-
- $options
-
- : SettingsContainerInterface
-
-The settings container
-
-
- __construct()
-
- : mixed
-
-QRCode constructor.
-
-
- getMatrix()
-
- : QRMatrix
-
-Returns a QRMatrix object for the given $data and current QROptions
-
-
- initDataInterface()
-
- : QRDataInterface
-
-returns a fresh QRDataInterface for the given $data
-
-
- isAlphaNum()
-
- : bool
-
-checks if a string qualifies as alphanumeric
-
-
- isByte()
-
- : bool
-
-a dummy
-
-
- isKanji()
-
- : bool
-
-checks if a string qualifies as Kanji
-
-
- isNumber()
-
- : bool
-
-checks if a string qualifies as numeric
-
-
- render()
-
- : mixed
-
-Renders a QR Code for the given $data and QROptions
-
-
- checkString()
-
- : bool
-
-checks is a given $string matches the characters of a given $charmap, returns false on the first invalid occurence.
-
-
- initOutputInterface()
-
- : QROutputInterface
-
-returns a fresh (built-in) QROutputInterface
-
-
-
-
-
-
-
-
-
-
- DATA_ALPHANUM
-
-
-
-
-
-
-
- public
- int
- DATA_ALPHANUM
- = 0b10
-
-
-
-
-
-
-
-
-
-
- DATA_BYTE
-
-
-
-
-
-
-
- public
- int
- DATA_BYTE
- = 0b100
-
-
-
-
-
-
-
-
-
-
- DATA_KANJI
-
-
-
-
-
-
-
- public
- int
- DATA_KANJI
- = 0b1000
-
-
-
-
-
-
-
-
-
-
- DATA_MODES
-
-
-
-
-
- References to the keys of the following tables:
-
-
- public
- array<string|int, int>
- DATA_MODES
- = [self::DATA_NUMBER => 0, self::DATA_ALPHANUM => 1, self::DATA_BYTE => 2, self::DATA_KANJI => 3]
-
-
-
-
-
-
-
-
-
- see
-
-
- QRDataInterface::MAX_LENGTH
-
-
-
-
-
-
-
-
-
- DATA_NUMBER
-
-
-
-
-
-
-
- public
- int
- DATA_NUMBER
- = 0b1
-
-
-
-
-
-
-
-
-
-
- ECC_H
-
-
-
-
-
-
-
- public
- int
- ECC_H
- = 0b10
-
-
-
-
-
-
-
-
-
-
- ECC_L
-
-
-
-
-
-
-
- public
- int
- ECC_L
- = 0b1
-
-
-
-
-
-
-
-
-
-
- ECC_M
-
-
-
-
-
-
-
- public
- int
- ECC_M
- = 0b0
-
-
-
-
-
-
-
-
-
-
- ECC_MODES
-
-
-
-
-
- References to the keys of the following tables:
-
-
- public
- array<string|int, int>
- ECC_MODES
- = [self::ECC_L => 0, self::ECC_M => 1, self::ECC_Q => 2, self::ECC_H => 3]
-
-
-
-
-
-
-
-
-
- see
-
-
- QRDataInterface::MAX_BITS
-
-
-
-
-
- see
-
-
- QRDataInterface::RSBLOCKS
-
-
-
-
-
- see
-
-
- QRMatrix::formatPattern
-
-
-
-
-
-
-
-
-
- ECC_Q
-
-
-
-
-
-
-
- public
- int
- ECC_Q
- = 0b11
-
-
-
-
-
-
-
-
-
-
- MASK_PATTERN_AUTO
-
-
-
-
-
-
-
- public
- int
- MASK_PATTERN_AUTO
- = -1
-
-
-
-
-
-
-
-
-
-
- OUTPUT_CUSTOM
-
-
-
-
-
-
-
- public
- string
- OUTPUT_CUSTOM
- = 'custom'
-
-
-
-
-
-
-
-
-
-
- OUTPUT_FPDF
-
-
-
-
-
-
-
- public
- string
- OUTPUT_FPDF
- = 'fpdf'
-
-
-
-
-
-
-
-
-
-
- OUTPUT_IMAGE_GIF
-
-
-
-
-
-
-
- public
- string
- OUTPUT_IMAGE_GIF
- = 'gif'
-
-
-
-
-
-
-
-
-
-
- OUTPUT_IMAGE_JPG
-
-
-
-
-
-
-
- public
- string
- OUTPUT_IMAGE_JPG
- = 'jpg'
-
-
-
-
-
-
-
-
-
-
- OUTPUT_IMAGE_PNG
-
-
-
-
-
-
-
- public
- string
- OUTPUT_IMAGE_PNG
- = 'png'
-
-
-
-
-
-
-
-
-
-
- OUTPUT_IMAGICK
-
-
-
-
-
-
-
- public
- string
- OUTPUT_IMAGICK
- = 'imagick'
-
-
-
-
-
-
-
-
-
-
- OUTPUT_MARKUP_HTML
-
-
-
-
-
-
-
- public
- string
- OUTPUT_MARKUP_HTML
- = 'html'
-
-
-
-
-
-
-
-
-
-
- OUTPUT_MARKUP_SVG
-
-
-
-
-
-
-
- public
- string
- OUTPUT_MARKUP_SVG
- = 'svg'
-
-
-
-
-
-
-
-
-
-
- OUTPUT_MODES
-
-
-
-
-
- Map of built-in output modules => capabilities
-
-
- public
- array<string|int, array<string|int, string>>
- OUTPUT_MODES
- = [chillerlanQRCodeOutputQRMarkup::class => [self::OUTPUT_MARKUP_SVG, self::OUTPUT_MARKUP_HTML], chillerlanQRCodeOutputQRImage::class => [self::OUTPUT_IMAGE_PNG, self::OUTPUT_IMAGE_GIF, self::OUTPUT_IMAGE_JPG], chillerlanQRCodeOutputQRString::class => [self::OUTPUT_STRING_JSON, self::OUTPUT_STRING_TEXT], chillerlanQRCodeOutputQRImagick::class => [self::OUTPUT_IMAGICK], chillerlanQRCodeOutputQRFpdf::class => [self::OUTPUT_FPDF]]
-
-
-
-
-
-
-
-
-
-
- OUTPUT_STRING_JSON
-
-
-
-
-
-
-
- public
- string
- OUTPUT_STRING_JSON
- = 'json'
-
-
-
-
-
-
-
-
-
-
- OUTPUT_STRING_TEXT
-
-
-
-
-
-
-
- public
- string
- OUTPUT_STRING_TEXT
- = 'text'
-
-
-
-
-
-
-
-
-
-
- VERSION_AUTO
-
-
-
-
-
-
-
- public
- int
- VERSION_AUTO
- = -1
-
-
-
-
-
-
-
-
-
-
- DATA_INTERFACES
-
-
-
-
-
- Map of data mode => interface
-
-
- protected
- array<string|int, string>
- DATA_INTERFACES
- = ['number' => chillerlanQRCodeDataNumber::class, 'alphanum' => chillerlanQRCodeDataAlphaNum::class, 'kanji' => chillerlanQRCodeDataKanji::class, 'byte' => chillerlanQRCodeDataByte::class]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $dataInterface
-
-
-
-
-
-
- The selected data interface (Number, AlphaNum, Kanji, Byte)
-
-
- protected
- QRDataInterface
- $dataInterface
-
-
-
-
-
-
-
-
-
- $options
-
-
-
-
-
-
- The settings container
-
-
- protected
- SettingsContainerInterface
- $options
-
-
-
-
-
-
-
-
-
-
-
-
-
- __construct()
-
-
-
-
- QRCode constructor.
-
-
- public
- __construct ( [ SettingsContainerInterface $options = null ] ) : mixed
-
- Sets the options instance, determines the current mb-encoding and sets it to UTF-8
-
-
- Parameters
-
-
- $options
- : SettingsContainerInterface
- = null
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- getMatrix()
-
-
-
-
- Returns a QRMatrix object for the given $data and current QROptions
-
-
- public
- getMatrix ( string $data ) : QRMatrix
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
-
- Return values
- QRMatrix
- —
-
-
-
-
-
-
- initDataInterface()
-
-
-
-
- returns a fresh QRDataInterface for the given $data
-
-
- public
- initDataInterface ( string $data ) : QRDataInterface
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeDataException
-
-
-
-
-
-
- Return values
- QRDataInterface
- —
-
-
-
-
-
-
- isAlphaNum()
-
-
-
-
- checks if a string qualifies as alphanumeric
-
-
- public
- isAlphaNum ( string $string ) : bool
-
-
-
- Parameters
-
-
- $string
- : string
-
-
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- isByte()
-
-
-
-
- a dummy
-
-
- public
- isByte ( string $data ) : bool
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- isKanji()
-
-
-
-
- checks if a string qualifies as Kanji
-
-
- public
- isKanji ( string $string ) : bool
-
-
-
- Parameters
-
-
- $string
- : string
-
-
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- isNumber()
-
-
-
-
- checks if a string qualifies as numeric
-
-
- public
- isNumber ( string $string ) : bool
-
-
-
- Parameters
-
-
- $string
- : string
-
-
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- render()
-
-
-
-
- Renders a QR Code for the given $data and QROptions
-
-
- public
- render ( string $data [ , string $file = null ] ) : mixed
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
- $file
- : string
- = null
-
-
-
-
-
-
-
- Return values
- mixed
- —
-
-
-
-
-
-
- checkString()
-
-
-
-
- checks is a given $string matches the characters of a given $charmap, returns false on the first invalid occurence.
-
-
- protected
- checkString ( string $string , array<string|int, mixed> $charmap ) : bool
-
-
-
- Parameters
-
-
- $string
- : string
-
-
-
-
-
- $charmap
- : array<string|int, mixed>
-
-
-
-
-
-
-
-
- Return values
- bool
- —
-
-
-
-
-
-
- initOutputInterface()
-
-
-
-
- returns a fresh (built-in) QROutputInterface
-
-
- protected
- initOutputInterface ( string $data ) : QROutputInterface
-
-
-
- Parameters
-
-
- $data
- : string
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeOutputException
-
-
-
-
-
-
- Return values
- QROutputInterface
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-QRCodeException.html b/classes/chillerlan-QRCode-QRCodeException.html
deleted file mode 100644
index 9b1b77223..000000000
--- a/classes/chillerlan-QRCode-QRCodeException.html
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCodeException
-
-
- extends Exception
-
-
-
-
-
-
-
-
- An exception container
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-QROptions.html b/classes/chillerlan-QRCode-QROptions.html
deleted file mode 100644
index 403314252..000000000
--- a/classes/chillerlan-QRCode-QROptions.html
+++ /dev/null
@@ -1,3186 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROptions
-
-
- extends SettingsContainerAbstract
-
-
-
-
-
- Uses
- QROptionsTrait
-
-
-
-
- The QRCode settings container
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $addQuietzone
-
- : bool
-
-
-
-
- $cachefile
-
- : string|null
-
-
-
-
- $cssClass
-
- : string
-
-
-
-
- $dataModeOverride
-
- : string|null
-
-
-
-
- $eccLevel
-
- : int
-
-
-
-
- $eol
-
- : string
-
-
-
-
- $fpdfMeasureUnit
-
- : string
-
-
-
-
- $imageBase64
-
- : bool
-
-
-
-
- $imageTransparencyBG
-
- : array<string|int, mixed>
-
-
-
-
- $imageTransparent
-
- : bool
-
-
-
-
- $imagickBG
-
- : string|null
-
-
-
-
- $imagickFormat
-
- : string
-
-
-
-
- $jpegQuality
-
- : int
-
-
-
-
- $markupDark
-
- : string
-
-
-
-
- $markupLight
-
- : string
-
-
-
-
- $maskPattern
-
- : int
-
-
-
-
- $moduleValues
-
- : array<string|int, mixed>|null
-
-
-
-
- $outputInterface
-
- : string|null
-
-
-
-
- $outputType
-
- : string
-
-
-
-
- $pngCompression
-
- : int
-
-
-
-
- $quietzoneSize
-
- : int
-
-
-
-
- $returnResource
-
- : bool
-
-
-
-
- $scale
-
- : int
-
-
-
-
- $svgDefs
-
- : string
-
-
-
-
- $svgOpacity
-
- : float
-
-
-
-
- $svgViewBoxSize
-
- : int
-
-
-
-
- $textDark
-
- : string
-
-
-
-
- $textLight
-
- : string
-
-
-
-
- $version
-
- : int
-
-
-
-
- $versionMax
-
- : int
-
-
-
-
- $versionMin
-
- : int
-
-
-
-
- $addQuietzone
-
- : bool
-
-Add a "quiet zone" (margin) according to the QR code spec
-
-
- $cachefile
-
- : string|null
-
-/path/to/cache.file
-
-
- $cssClass
-
- : string
-
-a common css class
-
-
- $dataModeOverride
-
- : string|null
-
-Use this to circumvent the data mode detection and force the usage of the given mode.
-
-
- $eccLevel
-
- : int
-
-Error correct level
-
-
- $eol
-
- : string
-
-newline string [HTML, SVG, TEXT]
-
-
- $fpdfMeasureUnit
-
- : string
-
-Measurement unit for FPDF output: pt, mm, cm, in (defaults to "pt")
-
-
- $imageBase64
-
- : bool
-
-toggle base64 or raw image data
-
-
- $imageTransparencyBG
-
- : array<string|int, mixed>
-
-
-
-
- $imageTransparent
-
- : bool
-
-toggle transparency, not supported by jpg
-
-
- $imagickBG
-
- : string|null
-
-Imagick background color (defaults to "transparent")
-
-
- $imagickFormat
-
- : string
-
-Imagick output format
-
-
- $jpegQuality
-
- : int
-
-
-
-
- $markupDark
-
- : string
-
-markup substitute for dark (CSS value)
-
-
- $markupLight
-
- : string
-
-markup substitute for light (CSS value)
-
-
- $maskPattern
-
- : int
-
-Mask Pattern to use
-
-
- $moduleValues
-
- : array<string|int, mixed>|null
-
-Module values map
-
-
- $outputInterface
-
- : string|null
-
-the FQCN of the custom QROutputInterface if $outputType is set to QRCode::OUTPUT_CUSTOM
-
-
- $outputType
-
- : string
-
-The output type
-
-
- $pngCompression
-
- : int
-
-
-
-
- $quietzoneSize
-
- : int
-
-Size of the quiet zone
-
-
- $returnResource
-
- : bool
-
-Return the image resource instead of a render if applicable.
-
-
- $scale
-
- : int
-
-size of a QR code pixel [SVG, IMAGE_*], HTML via CSS
-
-
- $svgDefs
-
- : string
-
-anything between <defs>
-
-
- $svgOpacity
-
- : float
-
-SVG opacity
-
-
- $svgViewBoxSize
-
- : int|null
-
-SVG viewBox size. a single integer number which defines width/height of the viewBox attribute.
-
-
- $textDark
-
- : string
-
-string substitute for dark
-
-
- $textLight
-
- : string
-
-string substitute for light
-
-
- $version
-
- : int
-
-QR Code version number
-
-
- $versionMax
-
- : int
-
-Maximum QR version
-
-
- $versionMin
-
- : int
-
-Minimum QR version
-
-
- set_eccLevel()
-
- : void
-
-sets the error correction level
-
-
- set_fpdfMeasureUnit()
-
- : void
-
-sets the FPDF measurement unit
-
-
- set_imageTransparencyBG()
-
- : void
-
-sets the transparency background color
-
-
- set_maskPattern()
-
- : void
-
-sets/clamps the mask pattern
-
-
- set_version()
-
- : void
-
-sets/clamps the version number
-
-
- set_versionMax()
-
- : void
-
-sets the maximum version number
-
-
- set_versionMin()
-
- : void
-
-sets the minimum version number
-
-
- setMinMaxVersion()
-
- : void
-
-clamp min/max version number
-
-
-
-
-
-
-
-
-
-
-
-
- $addQuietzone
-
-
-
-
-
-
-
-
- public
- bool
- $addQuietzone
-
-
-
-
-
-
-
-
-
- $cachefile
-
-
-
-
-
-
-
-
- public
- string|null
- $cachefile
-
-
-
-
-
-
-
-
-
- $cssClass
-
-
-
-
-
-
-
-
- public
- string
- $cssClass
-
-
-
-
-
-
-
-
-
- $dataModeOverride
-
-
-
-
-
-
-
-
- public
- string|null
- $dataModeOverride
-
-
-
-
-
-
-
-
-
- $eccLevel
-
-
-
-
-
-
-
-
- public
- int
- $eccLevel
-
-
-
-
-
-
-
-
-
- $eol
-
-
-
-
-
-
-
-
- public
- string
- $eol
-
-
-
-
-
-
-
-
-
- $fpdfMeasureUnit
-
-
-
-
-
-
-
-
- public
- string
- $fpdfMeasureUnit
-
-
-
-
-
-
-
-
-
- $imageBase64
-
-
-
-
-
-
-
-
- public
- bool
- $imageBase64
-
-
-
-
-
-
-
-
-
- $imageTransparencyBG
-
-
-
-
-
-
-
-
- public
- array<string|int, mixed>
- $imageTransparencyBG
-
-
-
-
-
-
-
-
-
- $imageTransparent
-
-
-
-
-
-
-
-
- public
- bool
- $imageTransparent
-
-
-
-
-
-
-
-
-
- $imagickBG
-
-
-
-
-
-
-
-
- public
- string|null
- $imagickBG
-
-
-
-
-
-
-
-
-
-
-
-
-
- public
- string
- $imagickFormat
-
-
-
-
-
-
-
-
-
- $jpegQuality
-
-
-
-
-
-
-
-
- public
- int
- $jpegQuality
-
-
-
-
-
-
-
-
-
- $markupDark
-
-
-
-
-
-
-
-
- public
- string
- $markupDark
-
-
-
-
-
-
-
-
-
- $markupLight
-
-
-
-
-
-
-
-
- public
- string
- $markupLight
-
-
-
-
-
-
-
-
-
- $maskPattern
-
-
-
-
-
-
-
-
- public
- int
- $maskPattern
-
-
-
-
-
-
-
-
-
- $moduleValues
-
-
-
-
-
-
-
-
- public
- array<string|int, mixed>|null
- $moduleValues
-
-
-
-
-
-
-
-
-
- $outputInterface
-
-
-
-
-
-
-
-
- public
- string|null
- $outputInterface
-
-
-
-
-
-
-
-
-
- $outputType
-
-
-
-
-
-
-
-
- public
- string
- $outputType
-
-
-
-
-
-
-
-
-
- $pngCompression
-
-
-
-
-
-
-
-
- public
- int
- $pngCompression
-
-
-
-
-
-
-
-
-
- $quietzoneSize
-
-
-
-
-
-
-
-
- public
- int
- $quietzoneSize
-
-
-
-
-
-
-
-
-
- $returnResource
-
-
-
-
-
-
-
-
- public
- bool
- $returnResource
-
-
-
-
-
-
-
-
-
- $scale
-
-
-
-
-
-
-
-
- public
- int
- $scale
-
-
-
-
-
-
-
-
-
- $svgDefs
-
-
-
-
-
-
-
-
- public
- string
- $svgDefs
-
-
-
-
-
-
-
-
-
- $svgOpacity
-
-
-
-
-
-
-
-
- public
- float
- $svgOpacity
-
-
-
-
-
-
-
-
-
- $svgViewBoxSize
-
-
-
-
-
-
-
-
- public
- int
- $svgViewBoxSize
-
-
-
-
-
-
-
-
-
- $textDark
-
-
-
-
-
-
-
-
- public
- string
- $textDark
-
-
-
-
-
-
-
-
-
- $textLight
-
-
-
-
-
-
-
-
- public
- string
- $textLight
-
-
-
-
-
-
-
-
-
- $version
-
-
-
-
-
-
-
-
- public
- int
- $version
-
-
-
-
-
-
-
-
-
- $versionMax
-
-
-
-
-
-
-
-
- public
- int
- $versionMax
-
-
-
-
-
-
-
-
-
- $versionMin
-
-
-
-
-
-
-
-
- public
- int
- $versionMin
-
-
-
-
-
-
-
-
-
- $addQuietzone
-
-
-
-
-
-
- Add a "quiet zone" (margin) according to the QR code spec
-
-
- protected
- bool
- $addQuietzone
- = true
-
-
-
-
-
-
-
-
- $cachefile
-
-
-
-
-
-
- /path/to/cache.file
-
-
- protected
- string|null
- $cachefile
- = null
-
-
-
-
-
-
-
-
- $cssClass
-
-
-
-
-
-
- a common css class
-
-
- protected
- string
- $cssClass
- = ''
-
-
-
-
-
-
-
-
- $dataModeOverride
-
-
-
-
-
-
- Use this to circumvent the data mode detection and force the usage of the given mode.
-
-
- protected
- string|null
- $dataModeOverride
- = null
-
- valid modes are: Number, AlphaNum, Kanji, Byte (case insensitive)
-
-
-
-
-
-
- see
-
-
- https://github.com/chillerlan/php-qrcode/issues/39
-
-
-
-
-
-
-
-
-
- $eccLevel
-
-
-
-
-
-
- Error correct level
-
-
- protected
- int
- $eccLevel
- = chillerlanQRCodeQRCode::ECC_L
-
- QRCode::ECC_X where X is:
-
-L => 7%
-M => 15%
-Q => 25%
-H => 30%
-
-
-
-
-
-
-
-
- $eol
-
-
-
-
-
-
- newline string [HTML, SVG, TEXT]
-
-
- protected
- string
- $eol
- = PHP_EOL
-
-
-
-
-
-
-
-
- $fpdfMeasureUnit
-
-
-
-
-
-
- Measurement unit for FPDF output: pt, mm, cm, in (defaults to "pt")
-
-
- protected
- string
- $fpdfMeasureUnit
- = 'pt'
-
-
-
-
-
-
-
- see
-
-
- FPDF::__construct()
-
-
-
-
-
-
-
-
-
- $imageBase64
-
-
-
-
-
-
- toggle base64 or raw image data
-
-
- protected
- bool
- $imageBase64
- = true
-
-
-
-
-
-
-
-
- $imageTransparencyBG
-
-
-
-
-
-
-
-
- protected
- array<string|int, mixed>
- $imageTransparencyBG
- = [255, 255, 255]
-
-
-
-
-
-
-
- see
-
-
- imagecolortransparent()
-
-
-
-
-
-
-
-
-
- $imageTransparent
-
-
-
-
-
-
- toggle transparency, not supported by jpg
-
-
- protected
- bool
- $imageTransparent
- = true
-
-
-
-
-
-
-
-
- $imagickBG
-
-
-
-
-
-
- Imagick background color (defaults to "transparent")
-
-
- protected
- string|null
- $imagickBG
- = null
-
-
-
-
-
-
-
- see
-
-
- ImagickPixel::__construct()
-
-
-
-
-
-
-
-
-
-
-
- Imagick output format
-
-
- protected
- string
- $imagickFormat
- = 'png'
-
-
-
-
-
-
-
- see
-
-
- Imagick::setType()
-
-
-
-
-
-
-
-
-
- $jpegQuality
-
-
-
-
-
-
-
-
- protected
- int
- $jpegQuality
- = 85
-
-
-
-
-
-
-
- see
-
-
- imagejpeg()
-
-
-
-
-
-
-
-
-
- $markupDark
-
-
-
-
-
-
- markup substitute for dark (CSS value)
-
-
- protected
- string
- $markupDark
- = '#000'
-
-
-
-
-
-
-
-
- $markupLight
-
-
-
-
-
-
- markup substitute for light (CSS value)
-
-
- protected
- string
- $markupLight
- = '#fff'
-
-
-
-
-
-
-
-
- $maskPattern
-
-
-
-
-
-
- Mask Pattern to use
-
-
- protected
- int
- $maskPattern
- = chillerlanQRCodeQRCode::MASK_PATTERN_AUTO
-
- [0...7] or QRCode::MASK_PATTERN_AUTO
-
-
-
-
-
-
-
- $moduleValues
-
-
-
-
-
-
- Module values map
-
-
- protected
- array<string|int, mixed>|null
- $moduleValues
- = null
-
-
-HTML, IMAGICK: #ABCDEF, cssname, rgb(), rgba()...
-IMAGE: [63, 127, 255] // R, G, B
-
-
-
-
-
-
-
-
- $outputInterface
-
-
-
-
-
-
- the FQCN of the custom QROutputInterface if $outputType is set to QRCode::OUTPUT_CUSTOM
-
-
- protected
- string|null
- $outputInterface
- = null
-
-
-
-
-
-
-
-
- $outputType
-
-
-
-
-
-
- The output type
-
-
- protected
- string
- $outputType
- = chillerlanQRCodeQRCode::OUTPUT_IMAGE_PNG
-
-
-QRCode::OUTPUT_MARKUP_XXXX where XXXX = HTML, SVG
-QRCode::OUTPUT_IMAGE_XXX where XXX = PNG, GIF, JPG
-QRCode::OUTPUT_STRING_XXXX where XXXX = TEXT, JSON
-QRCode::OUTPUT_CUSTOM
-
-
-
-
-
-
-
-
- $pngCompression
-
-
-
-
-
-
-
-
- protected
- int
- $pngCompression
- = -1
-
-
-
-
-
-
-
- see
-
-
- imagepng()
-
-
-
-
-
-
-
-
-
- $quietzoneSize
-
-
-
-
-
-
- Size of the quiet zone
-
-
- protected
- int
- $quietzoneSize
- = 4
-
- internally clamped to [0 ... $moduleCount / 2], defaults to 4 modules
-
-
-
-
-
-
-
- $returnResource
-
-
-
-
-
-
- Return the image resource instead of a render if applicable.
-
-
- protected
- bool
- $returnResource
- = false
-
- This option overrides other output options, such as $cachefile and $imageBase64.
-Supported by the following modules:
-
-QRImage: resource (PHP < 8), GdImage
-QRImagick: Imagick
-QRFpdf: FPDF
-
-
-
-
-
-
-
- see
-
-
- QROutputInterface::dump()
-
-
-
-
-
-
-
-
-
- $scale
-
-
-
-
-
-
- size of a QR code pixel [SVG, IMAGE_*], HTML via CSS
-
-
- protected
- int
- $scale
- = 5
-
-
-
-
-
-
-
-
- $svgDefs
-
-
-
-
-
-
- anything between <defs>
-
-
- protected
- string
- $svgDefs
- = '<style>rect{shape-rendering:crispEdges}</style>'
-
-
-
-
-
-
-
- see
-
-
- https://developer.mozilla.org/docs/Web/SVG/Element/defs
-
-
-
-
-
-
-
-
-
- $svgOpacity
-
-
-
-
-
-
- SVG opacity
-
-
- protected
- float
- $svgOpacity
- = 1.0
-
-
-
-
-
-
-
-
- $svgViewBoxSize
-
-
-
-
-
-
- SVG viewBox size. a single integer number which defines width/height of the viewBox attribute.
-
-
- protected
- int|null
- $svgViewBoxSize
- = null
-
-
-
-
-
-
-
- see
-
-
- https://css-tricks.com/scale-svg/#article-header-id-3
-
-
-
-
-
-
-
-
-
- $textDark
-
-
-
-
-
-
- string substitute for dark
-
-
- protected
- string
- $textDark
- = '🔴'
-
-
-
-
-
-
-
-
- $textLight
-
-
-
-
-
-
- string substitute for light
-
-
- protected
- string
- $textLight
- = '⭕'
-
-
-
-
-
-
-
-
- $version
-
-
-
-
-
-
- QR Code version number
-
-
- protected
- int
- $version
- = chillerlanQRCodeQRCode::VERSION_AUTO
-
- [1 ... 40] or QRCode::VERSION_AUTO
-
-
-
-
-
-
-
- $versionMax
-
-
-
-
-
-
- Maximum QR version
-
-
- protected
- int
- $versionMax
- = 40
-
-
-
-
-
-
-
-
- $versionMin
-
-
-
-
-
-
- Minimum QR version
-
-
- protected
- int
- $versionMin
- = 1
-
- if $version = QRCode::VERSION_AUTO
-
-
-
-
-
-
-
-
-
-
-
- set_eccLevel()
-
-
-
-
- sets the error correction level
-
-
- protected
- set_eccLevel ( int $eccLevel ) : void
-
-
-
- Parameters
-
-
- $eccLevel
- : int
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_fpdfMeasureUnit()
-
-
-
-
- sets the FPDF measurement unit
-
-
- protected
- set_fpdfMeasureUnit ( string $unit ) : void
-
-
-
- Parameters
-
-
- $unit
- : string
-
-
-
-
-
-
-
-
-
-
- codeCoverageIgnore
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_imageTransparencyBG()
-
-
-
-
- sets the transparency background color
-
-
- protected
- set_imageTransparencyBG ( array<string|int, mixed> $imageTransparencyBG ) : void
-
-
-
- Parameters
-
-
- $imageTransparencyBG
- : array<string|int, mixed>
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_maskPattern()
-
-
-
-
- sets/clamps the mask pattern
-
-
- protected
- set_maskPattern ( int $maskPattern ) : void
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_version()
-
-
-
-
- sets/clamps the version number
-
-
- protected
- set_version ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_versionMax()
-
-
-
-
- sets the maximum version number
-
-
- protected
- set_versionMax ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_versionMin()
-
-
-
-
- sets the minimum version number
-
-
- protected
- set_versionMin ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- setMinMaxVersion()
-
-
-
-
- clamp min/max version number
-
-
- protected
- setMinMaxVersion ( int $versionMin , int $versionMax ) : void
-
-
-
- Parameters
-
-
- $versionMin
- : int
-
-
-
-
-
- $versionMax
- : int
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCode-QROptionsTrait.html b/classes/chillerlan-QRCode-QROptionsTrait.html
deleted file mode 100644
index 8a5f9da04..000000000
--- a/classes/chillerlan-QRCode-QROptionsTrait.html
+++ /dev/null
@@ -1,1996 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROptionsTrait
-
-
-
-
- The QRCode plug-in settings & setter functionality
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $addQuietzone
-
- : bool
-
-Add a "quiet zone" (margin) according to the QR code spec
-
-
- $cachefile
-
- : string|null
-
-/path/to/cache.file
-
-
- $cssClass
-
- : string
-
-a common css class
-
-
- $dataModeOverride
-
- : string|null
-
-Use this to circumvent the data mode detection and force the usage of the given mode.
-
-
- $eccLevel
-
- : int
-
-Error correct level
-
-
- $eol
-
- : string
-
-newline string [HTML, SVG, TEXT]
-
-
- $fpdfMeasureUnit
-
- : string
-
-Measurement unit for FPDF output: pt, mm, cm, in (defaults to "pt")
-
-
- $imageBase64
-
- : bool
-
-toggle base64 or raw image data
-
-
- $imageTransparencyBG
-
- : array<string|int, mixed>
-
-
-
-
- $imageTransparent
-
- : bool
-
-toggle transparency, not supported by jpg
-
-
- $imagickBG
-
- : string|null
-
-Imagick background color (defaults to "transparent")
-
-
- $imagickFormat
-
- : string
-
-Imagick output format
-
-
- $jpegQuality
-
- : int
-
-
-
-
- $markupDark
-
- : string
-
-markup substitute for dark (CSS value)
-
-
- $markupLight
-
- : string
-
-markup substitute for light (CSS value)
-
-
- $maskPattern
-
- : int
-
-Mask Pattern to use
-
-
- $moduleValues
-
- : array<string|int, mixed>|null
-
-Module values map
-
-
- $outputInterface
-
- : string|null
-
-the FQCN of the custom QROutputInterface if $outputType is set to QRCode::OUTPUT_CUSTOM
-
-
- $outputType
-
- : string
-
-The output type
-
-
- $pngCompression
-
- : int
-
-
-
-
- $quietzoneSize
-
- : int
-
-Size of the quiet zone
-
-
- $returnResource
-
- : bool
-
-Return the image resource instead of a render if applicable.
-
-
- $scale
-
- : int
-
-size of a QR code pixel [SVG, IMAGE_*], HTML via CSS
-
-
- $svgDefs
-
- : string
-
-anything between <defs>
-
-
- $svgOpacity
-
- : float
-
-SVG opacity
-
-
- $svgViewBoxSize
-
- : int|null
-
-SVG viewBox size. a single integer number which defines width/height of the viewBox attribute.
-
-
- $textDark
-
- : string
-
-string substitute for dark
-
-
- $textLight
-
- : string
-
-string substitute for light
-
-
- $version
-
- : int
-
-QR Code version number
-
-
- $versionMax
-
- : int
-
-Maximum QR version
-
-
- $versionMin
-
- : int
-
-Minimum QR version
-
-
- set_eccLevel()
-
- : void
-
-sets the error correction level
-
-
- set_fpdfMeasureUnit()
-
- : void
-
-sets the FPDF measurement unit
-
-
- set_imageTransparencyBG()
-
- : void
-
-sets the transparency background color
-
-
- set_maskPattern()
-
- : void
-
-sets/clamps the mask pattern
-
-
- set_version()
-
- : void
-
-sets/clamps the version number
-
-
- set_versionMax()
-
- : void
-
-sets the maximum version number
-
-
- set_versionMin()
-
- : void
-
-sets the minimum version number
-
-
- setMinMaxVersion()
-
- : void
-
-clamp min/max version number
-
-
-
-
-
-
-
-
-
-
- $addQuietzone
-
-
-
-
-
-
- Add a "quiet zone" (margin) according to the QR code spec
-
-
- protected
- bool
- $addQuietzone
- = true
-
-
-
-
-
-
-
-
- $cachefile
-
-
-
-
-
-
- /path/to/cache.file
-
-
- protected
- string|null
- $cachefile
- = null
-
-
-
-
-
-
-
-
- $cssClass
-
-
-
-
-
-
- a common css class
-
-
- protected
- string
- $cssClass
- = ''
-
-
-
-
-
-
-
-
- $dataModeOverride
-
-
-
-
-
-
- Use this to circumvent the data mode detection and force the usage of the given mode.
-
-
- protected
- string|null
- $dataModeOverride
- = null
-
- valid modes are: Number, AlphaNum, Kanji, Byte (case insensitive)
-
-
-
-
-
-
- see
-
-
- https://github.com/chillerlan/php-qrcode/issues/39
-
-
-
-
-
-
-
-
-
- $eccLevel
-
-
-
-
-
-
- Error correct level
-
-
- protected
- int
- $eccLevel
- = chillerlanQRCodeQRCode::ECC_L
-
- QRCode::ECC_X where X is:
-
-L => 7%
-M => 15%
-Q => 25%
-H => 30%
-
-
-
-
-
-
-
-
- $eol
-
-
-
-
-
-
- newline string [HTML, SVG, TEXT]
-
-
- protected
- string
- $eol
- = PHP_EOL
-
-
-
-
-
-
-
-
- $fpdfMeasureUnit
-
-
-
-
-
-
- Measurement unit for FPDF output: pt, mm, cm, in (defaults to "pt")
-
-
- protected
- string
- $fpdfMeasureUnit
- = 'pt'
-
-
-
-
-
-
-
- see
-
-
- FPDF::__construct()
-
-
-
-
-
-
-
-
-
- $imageBase64
-
-
-
-
-
-
- toggle base64 or raw image data
-
-
- protected
- bool
- $imageBase64
- = true
-
-
-
-
-
-
-
-
- $imageTransparencyBG
-
-
-
-
-
-
-
-
- protected
- array<string|int, mixed>
- $imageTransparencyBG
- = [255, 255, 255]
-
-
-
-
-
-
-
- see
-
-
- imagecolortransparent()
-
-
-
-
-
-
-
-
-
- $imageTransparent
-
-
-
-
-
-
- toggle transparency, not supported by jpg
-
-
- protected
- bool
- $imageTransparent
- = true
-
-
-
-
-
-
-
-
- $imagickBG
-
-
-
-
-
-
- Imagick background color (defaults to "transparent")
-
-
- protected
- string|null
- $imagickBG
- = null
-
-
-
-
-
-
-
- see
-
-
- ImagickPixel::__construct()
-
-
-
-
-
-
-
-
-
-
-
- Imagick output format
-
-
- protected
- string
- $imagickFormat
- = 'png'
-
-
-
-
-
-
-
- see
-
-
- Imagick::setType()
-
-
-
-
-
-
-
-
-
- $jpegQuality
-
-
-
-
-
-
-
-
- protected
- int
- $jpegQuality
- = 85
-
-
-
-
-
-
-
- see
-
-
- imagejpeg()
-
-
-
-
-
-
-
-
-
- $markupDark
-
-
-
-
-
-
- markup substitute for dark (CSS value)
-
-
- protected
- string
- $markupDark
- = '#000'
-
-
-
-
-
-
-
-
- $markupLight
-
-
-
-
-
-
- markup substitute for light (CSS value)
-
-
- protected
- string
- $markupLight
- = '#fff'
-
-
-
-
-
-
-
-
- $maskPattern
-
-
-
-
-
-
- Mask Pattern to use
-
-
- protected
- int
- $maskPattern
- = chillerlanQRCodeQRCode::MASK_PATTERN_AUTO
-
- [0...7] or QRCode::MASK_PATTERN_AUTO
-
-
-
-
-
-
-
- $moduleValues
-
-
-
-
-
-
- Module values map
-
-
- protected
- array<string|int, mixed>|null
- $moduleValues
- = null
-
-
-HTML, IMAGICK: #ABCDEF, cssname, rgb(), rgba()...
-IMAGE: [63, 127, 255] // R, G, B
-
-
-
-
-
-
-
-
- $outputInterface
-
-
-
-
-
-
- the FQCN of the custom QROutputInterface if $outputType is set to QRCode::OUTPUT_CUSTOM
-
-
- protected
- string|null
- $outputInterface
- = null
-
-
-
-
-
-
-
-
- $outputType
-
-
-
-
-
-
- The output type
-
-
- protected
- string
- $outputType
- = chillerlanQRCodeQRCode::OUTPUT_IMAGE_PNG
-
-
-QRCode::OUTPUT_MARKUP_XXXX where XXXX = HTML, SVG
-QRCode::OUTPUT_IMAGE_XXX where XXX = PNG, GIF, JPG
-QRCode::OUTPUT_STRING_XXXX where XXXX = TEXT, JSON
-QRCode::OUTPUT_CUSTOM
-
-
-
-
-
-
-
-
- $pngCompression
-
-
-
-
-
-
-
-
- protected
- int
- $pngCompression
- = -1
-
-
-
-
-
-
-
- see
-
-
- imagepng()
-
-
-
-
-
-
-
-
-
- $quietzoneSize
-
-
-
-
-
-
- Size of the quiet zone
-
-
- protected
- int
- $quietzoneSize
- = 4
-
- internally clamped to [0 ... $moduleCount / 2], defaults to 4 modules
-
-
-
-
-
-
-
- $returnResource
-
-
-
-
-
-
- Return the image resource instead of a render if applicable.
-
-
- protected
- bool
- $returnResource
- = false
-
- This option overrides other output options, such as $cachefile and $imageBase64.
-Supported by the following modules:
-
-QRImage: resource (PHP < 8), GdImage
-QRImagick: Imagick
-QRFpdf: FPDF
-
-
-
-
-
-
-
- see
-
-
- QROutputInterface::dump()
-
-
-
-
-
-
-
-
-
- $scale
-
-
-
-
-
-
- size of a QR code pixel [SVG, IMAGE_*], HTML via CSS
-
-
- protected
- int
- $scale
- = 5
-
-
-
-
-
-
-
-
- $svgDefs
-
-
-
-
-
-
- anything between <defs>
-
-
- protected
- string
- $svgDefs
- = '<style>rect{shape-rendering:crispEdges}</style>'
-
-
-
-
-
-
-
- see
-
-
- https://developer.mozilla.org/docs/Web/SVG/Element/defs
-
-
-
-
-
-
-
-
-
- $svgOpacity
-
-
-
-
-
-
- SVG opacity
-
-
- protected
- float
- $svgOpacity
- = 1.0
-
-
-
-
-
-
-
-
- $svgViewBoxSize
-
-
-
-
-
-
- SVG viewBox size. a single integer number which defines width/height of the viewBox attribute.
-
-
- protected
- int|null
- $svgViewBoxSize
- = null
-
-
-
-
-
-
-
- see
-
-
- https://css-tricks.com/scale-svg/#article-header-id-3
-
-
-
-
-
-
-
-
-
- $textDark
-
-
-
-
-
-
- string substitute for dark
-
-
- protected
- string
- $textDark
- = '🔴'
-
-
-
-
-
-
-
-
- $textLight
-
-
-
-
-
-
- string substitute for light
-
-
- protected
- string
- $textLight
- = '⭕'
-
-
-
-
-
-
-
-
- $version
-
-
-
-
-
-
- QR Code version number
-
-
- protected
- int
- $version
- = chillerlanQRCodeQRCode::VERSION_AUTO
-
- [1 ... 40] or QRCode::VERSION_AUTO
-
-
-
-
-
-
-
- $versionMax
-
-
-
-
-
-
- Maximum QR version
-
-
- protected
- int
- $versionMax
- = 40
-
-
-
-
-
-
-
-
- $versionMin
-
-
-
-
-
-
- Minimum QR version
-
-
- protected
- int
- $versionMin
- = 1
-
- if $version = QRCode::VERSION_AUTO
-
-
-
-
-
-
-
-
-
-
-
- set_eccLevel()
-
-
-
-
- sets the error correction level
-
-
- protected
- set_eccLevel ( int $eccLevel ) : void
-
-
-
- Parameters
-
-
- $eccLevel
- : int
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_fpdfMeasureUnit()
-
-
-
-
- sets the FPDF measurement unit
-
-
- protected
- set_fpdfMeasureUnit ( string $unit ) : void
-
-
-
- Parameters
-
-
- $unit
- : string
-
-
-
-
-
-
-
-
-
-
- codeCoverageIgnore
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_imageTransparencyBG()
-
-
-
-
- sets the transparency background color
-
-
- protected
- set_imageTransparencyBG ( array<string|int, mixed> $imageTransparencyBG ) : void
-
-
-
- Parameters
-
-
- $imageTransparencyBG
- : array<string|int, mixed>
-
-
-
-
-
-
-
-
-
-
- throws
-
-
- QRCodeException
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_maskPattern()
-
-
-
-
- sets/clamps the mask pattern
-
-
- protected
- set_maskPattern ( int $maskPattern ) : void
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_version()
-
-
-
-
- sets/clamps the version number
-
-
- protected
- set_version ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_versionMax()
-
-
-
-
- sets the maximum version number
-
-
- protected
- set_versionMax ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- set_versionMin()
-
-
-
-
- sets the minimum version number
-
-
- protected
- set_versionMin ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- setMinMaxVersion()
-
-
-
-
- clamp min/max version number
-
-
- protected
- setMinMaxVersion ( int $versionMin , int $versionMax ) : void
-
-
-
- Parameters
-
-
- $versionMin
- : int
-
-
-
-
-
- $versionMax
- : int
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Data-AlphaNumTest.html b/classes/chillerlan-QRCodeTest-Data-AlphaNumTest.html
deleted file mode 100644
index 5dc5b13d5..000000000
--- a/classes/chillerlan-QRCodeTest-Data-AlphaNumTest.html
+++ /dev/null
@@ -1,466 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tests the AlphaNum class
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testCodeLengthOverflowException()
-
- : void
-
-Tests if an exception is thrown on data overflow
-
-
- testGetCharCodeException()
-
- : void
-
-Tests if an exception is thrown when an invalid character is encountered
-
-
- testGetMinimumVersion()
-
- : void
-
-Tests getting the minimum QR version for the given data
-
-
- testGetMinimumVersionException()
-
- : void
-
-Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
-
-
- testInitMatrix()
-
- : void
-
-Tests initializing the data matrix
-
-
- testInstance()
-
- : void
-
-Verifies the data interface instance
-
-
- testMaskEcc()
-
- : void
-
-Tests ecc masking and verifies against a sample
-
-
-
-
-
-
-
-
-
-
-
-
-
- testCodeLengthOverflowException()
-
-
-
-
- Tests if an exception is thrown on data overflow
-
-
- public
- testCodeLengthOverflowException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetCharCodeException()
-
-
-
-
- Tests if an exception is thrown when an invalid character is encountered
-
-
- public
- testGetCharCodeException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMinimumVersion()
-
-
-
-
- Tests getting the minimum QR version for the given data
-
-
- public
- testGetMinimumVersion ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMinimumVersionException()
-
-
-
-
- Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
-
-
- public
- testGetMinimumVersionException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInitMatrix()
-
-
-
-
- Tests initializing the data matrix
-
-
- public
- testInitMatrix ( int $maskPattern ) : void
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Verifies the data interface instance
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testMaskEcc()
-
-
-
-
- Tests ecc masking and verifies against a sample
-
-
- public
- testMaskEcc ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Data-ByteTest.html b/classes/chillerlan-QRCodeTest-Data-ByteTest.html
deleted file mode 100644
index f605d65e1..000000000
--- a/classes/chillerlan-QRCodeTest-Data-ByteTest.html
+++ /dev/null
@@ -1,425 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tests the Byte class
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testCodeLengthOverflowException()
-
- : void
-
-Tests if an exception is thrown on data overflow
-
-
- testGetMinimumVersion()
-
- : void
-
-Tests getting the minimum QR version for the given data
-
-
- testGetMinimumVersionException()
-
- : void
-
-Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
-
-
- testInitMatrix()
-
- : void
-
-Tests initializing the data matrix
-
-
- testInstance()
-
- : void
-
-Verifies the data interface instance
-
-
- testMaskEcc()
-
- : void
-
-Tests ecc masking and verifies against a sample
-
-
-
-
-
-
-
-
-
-
-
-
-
- testCodeLengthOverflowException()
-
-
-
-
- Tests if an exception is thrown on data overflow
-
-
- public
- testCodeLengthOverflowException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMinimumVersion()
-
-
-
-
- Tests getting the minimum QR version for the given data
-
-
- public
- testGetMinimumVersion ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMinimumVersionException()
-
-
-
-
- Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
-
-
- public
- testGetMinimumVersionException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInitMatrix()
-
-
-
-
- Tests initializing the data matrix
-
-
- public
- testInitMatrix ( int $maskPattern ) : void
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Verifies the data interface instance
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testMaskEcc()
-
-
-
-
- Tests ecc masking and verifies against a sample
-
-
- public
- testMaskEcc ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Data-DatainterfaceTestAbstract.html b/classes/chillerlan-QRCodeTest-Data-DatainterfaceTestAbstract.html
deleted file mode 100644
index 933e03146..000000000
--- a/classes/chillerlan-QRCodeTest-Data-DatainterfaceTestAbstract.html
+++ /dev/null
@@ -1,425 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- DatainterfaceTestAbstract
-
-
- extends TestCase
-
-
-
-
-
-
-
-
- The data interface test abstract
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testCodeLengthOverflowException()
-
- : void
-
-Tests if an exception is thrown on data overflow
-
-
- testGetMinimumVersion()
-
- : void
-
-Tests getting the minimum QR version for the given data
-
-
- testGetMinimumVersionException()
-
- : void
-
-Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
-
-
- testInitMatrix()
-
- : void
-
-Tests initializing the data matrix
-
-
- testInstance()
-
- : void
-
-Verifies the data interface instance
-
-
- testMaskEcc()
-
- : void
-
-Tests ecc masking and verifies against a sample
-
-
-
-
-
-
-
-
-
-
-
-
-
- testCodeLengthOverflowException()
-
-
-
-
- Tests if an exception is thrown on data overflow
-
-
- public
- testCodeLengthOverflowException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMinimumVersion()
-
-
-
-
- Tests getting the minimum QR version for the given data
-
-
- public
- testGetMinimumVersion ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMinimumVersionException()
-
-
-
-
- Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
-
-
- public
- testGetMinimumVersionException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInitMatrix()
-
-
-
-
- Tests initializing the data matrix
-
-
- public
- testInitMatrix ( int $maskPattern ) : void
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Verifies the data interface instance
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testMaskEcc()
-
-
-
-
- Tests ecc masking and verifies against a sample
-
-
- public
- testMaskEcc ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Data-KanjiTest.html b/classes/chillerlan-QRCodeTest-Data-KanjiTest.html
deleted file mode 100644
index 618a90e17..000000000
--- a/classes/chillerlan-QRCodeTest-Data-KanjiTest.html
+++ /dev/null
@@ -1,507 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tests the Kanji class
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testCodeLengthOverflowException()
-
- : void
-
-Tests if an exception is thrown on data overflow
-
-
- testGetMinimumVersion()
-
- : void
-
-Tests getting the minimum QR version for the given data
-
-
- testGetMinimumVersionException()
-
- : void
-
-Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
-
-
- testIllegalCharException1()
-
- : void
-
-Tests if an exception is thrown when an invalid character is encountered
-
-
- testIllegalCharException2()
-
- : void
-
-Tests if an exception is thrown when an invalid character is encountered
-
-
- testInitMatrix()
-
- : void
-
-Tests initializing the data matrix
-
-
- testInstance()
-
- : void
-
-Verifies the data interface instance
-
-
- testMaskEcc()
-
- : void
-
-Tests ecc masking and verifies against a sample
-
-
-
-
-
-
-
-
-
-
-
-
-
- testCodeLengthOverflowException()
-
-
-
-
- Tests if an exception is thrown on data overflow
-
-
- public
- testCodeLengthOverflowException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMinimumVersion()
-
-
-
-
- Tests getting the minimum QR version for the given data
-
-
- public
- testGetMinimumVersion ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMinimumVersionException()
-
-
-
-
- Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
-
-
- public
- testGetMinimumVersionException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testIllegalCharException1()
-
-
-
-
- Tests if an exception is thrown when an invalid character is encountered
-
-
- public
- testIllegalCharException1 ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testIllegalCharException2()
-
-
-
-
- Tests if an exception is thrown when an invalid character is encountered
-
-
- public
- testIllegalCharException2 ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInitMatrix()
-
-
-
-
- Tests initializing the data matrix
-
-
- public
- testInitMatrix ( int $maskPattern ) : void
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Verifies the data interface instance
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testMaskEcc()
-
-
-
-
- Tests ecc masking and verifies against a sample
-
-
- public
- testMaskEcc ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Data-MaskPatternTesterTest.html b/classes/chillerlan-QRCodeTest-Data-MaskPatternTesterTest.html
deleted file mode 100644
index b71f09313..000000000
--- a/classes/chillerlan-QRCodeTest-Data-MaskPatternTesterTest.html
+++ /dev/null
@@ -1,236 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MaskPatternTesterTest
-
-
- extends TestCase
-
-
-
-
-
-
-
-
- MaskPatternTester coverage test
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testMaskpattern()
-
- : void
-
-Tests getting the best mask pattern
-
-
- testMaskpatternID()
-
- : void
-
-Tests getting the penalty value for a given mask pattern
-
-
-
-
-
-
-
-
-
-
-
-
-
- testMaskpattern()
-
-
-
-
- Tests getting the best mask pattern
-
-
- public
- testMaskpattern ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testMaskpatternID()
-
-
-
-
- Tests getting the penalty value for a given mask pattern
-
-
- public
- testMaskpatternID ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Data-NumberTest.html b/classes/chillerlan-QRCodeTest-Data-NumberTest.html
deleted file mode 100644
index 51d662fca..000000000
--- a/classes/chillerlan-QRCodeTest-Data-NumberTest.html
+++ /dev/null
@@ -1,466 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tests the Number class
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testCodeLengthOverflowException()
-
- : void
-
-Tests if an exception is thrown on data overflow
-
-
- testGetCharCodeException()
-
- : void
-
-Tests if an exception is thrown when an invalid character is encountered
-
-
- testGetMinimumVersion()
-
- : void
-
-Tests getting the minimum QR version for the given data
-
-
- testGetMinimumVersionException()
-
- : void
-
-Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
-
-
- testInitMatrix()
-
- : void
-
-Tests initializing the data matrix
-
-
- testInstance()
-
- : void
-
-Verifies the data interface instance
-
-
- testMaskEcc()
-
- : void
-
-Tests ecc masking and verifies against a sample
-
-
-
-
-
-
-
-
-
-
-
-
-
- testCodeLengthOverflowException()
-
-
-
-
- Tests if an exception is thrown on data overflow
-
-
- public
- testCodeLengthOverflowException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetCharCodeException()
-
-
-
-
- Tests if an exception is thrown when an invalid character is encountered
-
-
- public
- testGetCharCodeException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMinimumVersion()
-
-
-
-
- Tests getting the minimum QR version for the given data
-
-
- public
- testGetMinimumVersion ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMinimumVersionException()
-
-
-
-
- Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
-
-
- public
- testGetMinimumVersionException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInitMatrix()
-
-
-
-
- Tests initializing the data matrix
-
-
- public
- testInitMatrix ( int $maskPattern ) : void
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Verifies the data interface instance
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testMaskEcc()
-
-
-
-
- Tests ecc masking and verifies against a sample
-
-
- public
- testMaskEcc ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html b/classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html
deleted file mode 100644
index 348dea2d1..000000000
--- a/classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html
+++ /dev/null
@@ -1,1207 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRMatrixTest
-
-
- extends TestCase
-
-
-
-
-
-
-
-
- Tests the QRMatix class
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testECC()
-
- : void
-
-Tests if eccLevel() returns the current (given) ECC level
-
-
- testGetSetCheck()
-
- : void
-
-Tests the set(), get() and check() methods
-
-
- testInstance()
-
- : void
-
-Validates the QRMatrix instance
-
-
- testInvalidEccException()
-
- : void
-
-Tests if an exception is thrown when an invalid ECC level was given
-
-
- testInvalidVersionException()
-
- : void
-
-Tests if an exception is thrown when an invalid QR version was given
-
-
- testMaskPattern()
-
- : void
-
-Tests if maskPattern() returns the current (or default) mask pattern
-
-
- testSetAlignmentPattern()
-
- : void
-
-Tests the alignment patterns and verifies their positions - version 1 (no pattern) skipped
-
-
- testSetDarkModule()
-
- : void
-
-Tests setting the dark module and verifies its position
-
-
- testSetFinderPattern()
-
- : void
-
-Tests setting the finder patterns and verifies their positions
-
-
- testSetFormatInfo()
-
- : void
-
-Tests the format patterns and verifies their positions
-
-
- testSetLogoSpaceInvalidEccException()
-
- : void
-
-
-
-
- testSetLogoSpaceMaxSizeException()
-
- : void
-
-
-
-
- testSetLogoSpaceOrientation()
-
- : void
-
-
-
-
- testSetLogoSpacePosition()
-
- : void
-
-
-
-
- testSetQuietZone()
-
- : void
-
-Tests the quiet zone pattern and verifies its position
-
-
- testSetQuietZoneException()
-
- : void
-
-Tests if an exception is thrown in an attempt to create it before data was written
-
-
- testSetSeparators()
-
- : void
-
-Tests the separator patterns and verifies their positions
-
-
- testSetTimingPattern()
-
- : void
-
-Tests the timing patterns and verifies their positions
-
-
- testSetVersionNumber()
-
- : void
-
-Tests the version patterns and verifies their positions - version < 7 skipped
-
-
- testSize()
-
- : void
-
-Tests if size() returns the actual matrix size/count
-
-
- testVersion()
-
- : void
-
-Tests if version() returns the current (given) version
-
-
-
-
-
-
-
-
-
-
-
-
-
- testECC()
-
-
-
-
- Tests if eccLevel() returns the current (given) ECC level
-
-
- public
- testECC ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetSetCheck()
-
-
-
-
- Tests the set(), get() and check() methods
-
-
- public
- testGetSetCheck ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Validates the QRMatrix instance
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInvalidEccException()
-
-
-
-
- Tests if an exception is thrown when an invalid ECC level was given
-
-
- public
- testInvalidEccException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInvalidVersionException()
-
-
-
-
- Tests if an exception is thrown when an invalid QR version was given
-
-
- public
- testInvalidVersionException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testMaskPattern()
-
-
-
-
- Tests if maskPattern() returns the current (or default) mask pattern
-
-
- public
- testMaskPattern ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetAlignmentPattern()
-
-
-
-
- Tests the alignment patterns and verifies their positions - version 1 (no pattern) skipped
-
-
- public
- testSetAlignmentPattern ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetDarkModule()
-
-
-
-
- Tests setting the dark module and verifies its position
-
-
- public
- testSetDarkModule ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetFinderPattern()
-
-
-
-
- Tests setting the finder patterns and verifies their positions
-
-
- public
- testSetFinderPattern ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
- Tests the format patterns and verifies their positions
-
-
- public
- testSetFormatInfo ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetLogoSpaceInvalidEccException()
-
-
-
-
-
-
- public
- testSetLogoSpaceInvalidEccException ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetLogoSpaceMaxSizeException()
-
-
-
-
-
-
- public
- testSetLogoSpaceMaxSizeException ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetLogoSpaceOrientation()
-
-
-
-
-
-
- public
- testSetLogoSpaceOrientation ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetLogoSpacePosition()
-
-
-
-
-
-
- public
- testSetLogoSpacePosition ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetQuietZone()
-
-
-
-
- Tests the quiet zone pattern and verifies its position
-
-
- public
- testSetQuietZone ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetQuietZoneException()
-
-
-
-
- Tests if an exception is thrown in an attempt to create it before data was written
-
-
- public
- testSetQuietZoneException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetSeparators()
-
-
-
-
- Tests the separator patterns and verifies their positions
-
-
- public
- testSetSeparators ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetTimingPattern()
-
-
-
-
- Tests the timing patterns and verifies their positions
-
-
- public
- testSetTimingPattern ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetVersionNumber()
-
-
-
-
- Tests the version patterns and verifies their positions - version < 7 skipped
-
-
- public
- testSetVersionNumber ( int $version ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSize()
-
-
-
-
- Tests if size() returns the actual matrix size/count
-
-
- public
- testSize ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testVersion()
-
-
-
-
- Tests if version() returns the current (given) version
-
-
- public
- testVersion ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Helpers-BitBufferTest.html b/classes/chillerlan-QRCodeTest-Helpers-BitBufferTest.html
deleted file mode 100644
index 434266b99..000000000
--- a/classes/chillerlan-QRCodeTest-Helpers-BitBufferTest.html
+++ /dev/null
@@ -1,386 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- BitBufferTest
-
-
- extends TestCase
-
-
-
-
-
-
-
-
- BitBuffer coverage test
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $bitBuffer
-
- : BitBuffer
-
-
-
-
- bitProvider()
-
- : array<string|int, mixed>
-
-
-
-
- testClear()
-
- : void
-
-
-
-
- testPut()
-
- : void
-
-
-
-
- setUp()
-
- : void
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $bitBuffer
-
-
-
-
-
-
-
-
- protected
- BitBuffer
- $bitBuffer
-
-
-
-
-
-
-
-
-
-
-
-
- bitProvider()
-
-
-
-
-
-
- public
- bitProvider ( ) : array<string|int, mixed>
-
-
-
-
-
- Return values
- array<string|int, mixed>
- —
-
-
-
-
-
-
- testClear()
-
-
-
-
-
-
- public
- testClear ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testPut()
-
-
-
-
-
-
- public
- testPut ( int $data , int $value ) : void
-
-
-
- Parameters
-
-
- $data
- : int
-
-
-
-
-
- $value
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- setUp()
-
-
-
-
-
-
- protected
- setUp ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Helpers-PolynomialTest.html b/classes/chillerlan-QRCodeTest-Helpers-PolynomialTest.html
deleted file mode 100644
index ad587a29e..000000000
--- a/classes/chillerlan-QRCodeTest-Helpers-PolynomialTest.html
+++ /dev/null
@@ -1,314 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PolynomialTest
-
-
- extends TestCase
-
-
-
-
-
-
-
-
- Polynomial coverage test
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- $polynomial
-
- : Polynomial
-
-
-
-
- testGexp()
-
- : void
-
-
-
-
- testGlogException()
-
- : void
-
-
-
-
- setUp()
-
- : void
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $polynomial
-
-
-
-
-
-
-
-
- protected
- Polynomial
- $polynomial
-
-
-
-
-
-
-
-
-
-
-
-
- testGexp()
-
-
-
-
-
-
- public
- testGexp ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGlogException()
-
-
-
-
-
-
- public
- testGlogException ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- setUp()
-
-
-
-
-
-
- protected
- setUp ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Output-QRFpdfTest.html b/classes/chillerlan-QRCodeTest-Output-QRFpdfTest.html
deleted file mode 100644
index 24279ac9a..000000000
--- a/classes/chillerlan-QRCodeTest-Output-QRFpdfTest.html
+++ /dev/null
@@ -1,470 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tests the QRFpdf output module
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testInstance()
-
- : void
-
-Validate the instance of the interface
-
-
- testOutputGetResource()
-
- : void
-
-
-
-
- testRenderImage()
-
- : void
-
-covers the built-in output modules, tests against pre-rendered data
-
-
- testSaveException()
-
- : void
-
-Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- testSetModuleValues()
-
- : void
-
-covers the module values settings
-
-
- testStringOutput()
-
- : void
-
-coverage of the built-in output modules
-
-
-
-
-
-
-
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Validate the instance of the interface
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testOutputGetResource()
-
-
-
-
-
-
- public
- testOutputGetResource ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testRenderImage()
-
-
-
-
- covers the built-in output modules, tests against pre-rendered data
-
-
- public
- testRenderImage ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSaveException()
-
-
-
-
- Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- public
- testSaveException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetModuleValues()
-
-
-
-
- covers the module values settings
-
-
- public
- testSetModuleValues ( ) : void
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testStringOutput()
-
-
-
-
- coverage of the built-in output modules
-
-
- public
- testStringOutput ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Output-QRImageTest.html b/classes/chillerlan-QRCodeTest-Output-QRImageTest.html
deleted file mode 100644
index 7b8ebaf9a..000000000
--- a/classes/chillerlan-QRCodeTest-Output-QRImageTest.html
+++ /dev/null
@@ -1,478 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tests the QRImage output module
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testInstance()
-
- : void
-
-Validate the instance of the interface
-
-
- testOutputGetResource()
-
- : void
-
-
-
-
- testRenderImage()
-
- : void
-
-covers the built-in output modules, tests against pre-rendered data
-
-
- testSaveException()
-
- : void
-
-Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- testSetModuleValues()
-
- : void
-
-covers the module values settings
-
-
- testStringOutput()
-
- : void
-
-coverage of the built-in output modules
-
-
-
-
-
-
-
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Validate the instance of the interface
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testOutputGetResource()
-
-
-
-
-
-
- public
- testOutputGetResource ( ) : void
-
-
-
-
-
-
-
-
- phan-suppress
-
-
-
- PhanUndeclaredClassReference
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testRenderImage()
-
-
-
-
- covers the built-in output modules, tests against pre-rendered data
-
-
- public
- testRenderImage ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSaveException()
-
-
-
-
- Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- public
- testSaveException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetModuleValues()
-
-
-
-
- covers the module values settings
-
-
- public
- testSetModuleValues ( ) : void
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testStringOutput()
-
-
-
-
- coverage of the built-in output modules
-
-
- public
- testStringOutput ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Output-QRImagickTest.html b/classes/chillerlan-QRCodeTest-Output-QRImagickTest.html
deleted file mode 100644
index 2453d359b..000000000
--- a/classes/chillerlan-QRCodeTest-Output-QRImagickTest.html
+++ /dev/null
@@ -1,462 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tests the QRImagick output module
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testInstance()
-
- : void
-
-Validate the instance of the interface
-
-
- testOutputGetResource()
-
- : void
-
-
-
-
- testRenderImage()
-
- : void
-
-covers the built-in output modules, tests against pre-rendered data
-
-
- testSaveException()
-
- : void
-
-Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- testSetModuleValues()
-
- : void
-
-covers the module values settings
-
-
- testStringOutput()
-
- : void
-
-coverage of the built-in output modules
-
-
-
-
-
-
-
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Validate the instance of the interface
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testOutputGetResource()
-
-
-
-
-
-
- public
- testOutputGetResource ( ) : void
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testRenderImage()
-
-
-
-
- covers the built-in output modules, tests against pre-rendered data
-
-
- public
- testRenderImage ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSaveException()
-
-
-
-
- Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- public
- testSaveException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetModuleValues()
-
-
-
-
- covers the module values settings
-
-
- public
- testSetModuleValues ( ) : void
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testStringOutput()
-
-
-
-
- coverage of the built-in output modules
-
-
- public
- testStringOutput ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Output-QRMarkupTest.html b/classes/chillerlan-QRCodeTest-Output-QRMarkupTest.html
deleted file mode 100644
index 093b52fea..000000000
--- a/classes/chillerlan-QRCodeTest-Output-QRMarkupTest.html
+++ /dev/null
@@ -1,423 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tests the QRMarkup output module
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testInstance()
-
- : void
-
-Validate the instance of the interface
-
-
- testRenderImage()
-
- : void
-
-covers the built-in output modules, tests against pre-rendered data
-
-
- testSaveException()
-
- : void
-
-Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- testSetModuleValues()
-
- : void
-
-covers the module values settings
-
-
- testStringOutput()
-
- : void
-
-coverage of the built-in output modules
-
-
-
-
-
-
-
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Validate the instance of the interface
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testRenderImage()
-
-
-
-
- covers the built-in output modules, tests against pre-rendered data
-
-
- public
- testRenderImage ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSaveException()
-
-
-
-
- Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- public
- testSaveException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetModuleValues()
-
-
-
-
- covers the module values settings
-
-
- public
- testSetModuleValues ( ) : void
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testStringOutput()
-
-
-
-
- coverage of the built-in output modules
-
-
- public
- testStringOutput ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Output-QROutputTestAbstract.html b/classes/chillerlan-QRCodeTest-Output-QROutputTestAbstract.html
deleted file mode 100644
index b9701b5c6..000000000
--- a/classes/chillerlan-QRCodeTest-Output-QROutputTestAbstract.html
+++ /dev/null
@@ -1,410 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROutputTestAbstract
-
-
- extends TestCase
-
-
-
-
-
-
-
-
- Test abstract for the several (built-in) output modules,
-should also be used to test custom output modules
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testInstance()
-
- : void
-
-Validate the instance of the interface
-
-
- testRenderImage()
-
- : void
-
-covers the built-in output modules, tests against pre-rendered data
-
-
- testSaveException()
-
- : void
-
-Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- testSetModuleValues()
-
- : void
-
-covers the module values settings
-
-
- testStringOutput()
-
- : void
-
-coverage of the built-in output modules
-
-
-
-
-
-
-
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Validate the instance of the interface
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testRenderImage()
-
-
-
-
- covers the built-in output modules, tests against pre-rendered data
-
-
- public
- testRenderImage ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSaveException()
-
-
-
-
- Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- public
- testSaveException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetModuleValues()
-
-
-
-
- covers the module values settings
-
-
- public
- abstract testSetModuleValues ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testStringOutput()
-
-
-
-
- coverage of the built-in output modules
-
-
- public
- testStringOutput ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-Output-QRStringTest.html b/classes/chillerlan-QRCodeTest-Output-QRStringTest.html
deleted file mode 100644
index f68491fd5..000000000
--- a/classes/chillerlan-QRCodeTest-Output-QRStringTest.html
+++ /dev/null
@@ -1,464 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tests the QRString output module
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testCustomOutput()
-
- : void
-
-covers the custom output functionality via an example
-
-
- testInstance()
-
- : void
-
-Validate the instance of the interface
-
-
- testRenderImage()
-
- : void
-
-covers the built-in output modules, tests against pre-rendered data
-
-
- testSaveException()
-
- : void
-
-Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- testSetModuleValues()
-
- : void
-
-covers the module values settings
-
-
- testStringOutput()
-
- : void
-
-coverage of the built-in output modules
-
-
-
-
-
-
-
-
-
-
-
-
-
- testCustomOutput()
-
-
-
-
- covers the custom output functionality via an example
-
-
- public
- testCustomOutput ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInstance()
-
-
-
-
- Validate the instance of the interface
-
-
- public
- testInstance ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testRenderImage()
-
-
-
-
- covers the built-in output modules, tests against pre-rendered data
-
-
- public
- testRenderImage ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSaveException()
-
-
-
-
- Tests if an exception is thrown when trying to write a cache file to an invalid destination
-
-
- public
- testSaveException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testSetModuleValues()
-
-
-
-
- covers the module values settings
-
-
- public
- testSetModuleValues ( ) : void
-
-
-
-
-
-
-
-
- inheritDoc
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testStringOutput()
-
-
-
-
- coverage of the built-in output modules
-
-
- public
- testStringOutput ( string $type ) : void
-
-
-
- Parameters
-
-
- $type
- : string
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-QRCodeTest.html b/classes/chillerlan-QRCodeTest-QRCodeTest.html
deleted file mode 100644
index 4d339d3c6..000000000
--- a/classes/chillerlan-QRCodeTest-QRCodeTest.html
+++ /dev/null
@@ -1,537 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCodeTest
-
-
- extends TestCase
-
-
-
-
-
-
-
-
- Tests basic functions of the QRCode class
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testAvoidTrimming()
-
- : void
-
-test whether stings are trimmed (they are not) - i'm still torn on that (see isByte)
-
-
- testDataModeOverride()
-
- : void
-
-tests if the data mode is overriden if QROptions::$dataModeOverride is set to a valid value
-
-
- testDataModeOverrideError()
-
- : void
-
-tests if an exception is thrown when an invalid character occurs when forcing a data mode other than Byte
-
-
- testGetMatrixException()
-
- : void
-
-tests if an exception is thrown when trying to call getMatrix() without data (empty string, no data set)
-
-
- testInitDataInterfaceException()
-
- : void
-
-tests if an exception is thrown when an invalid (built-in) output type is specified
-
-
- testIsAlphaNum()
-
- : void
-
-isAlphaNum() should pass on the 45 defined characters and fail on anything else (e.g. lowercase)
-
-
- testIsByte()
-
- : void
-
-isByte() passses any binary string and only fails on empty strings
-
-
- testIsKanji()
-
- : void
-
-isKanji() should pass on Kanji/SJIS characters and fail on everything else
-
-
- testIsNumber()
-
- : void
-
-isNumber() should pass on any number and fail on anything else
-
-
-
-
-
-
-
-
-
-
-
-
-
- testAvoidTrimming()
-
-
-
-
- test whether stings are trimmed (they are not) - i'm still torn on that (see isByte)
-
-
- public
- testAvoidTrimming ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testDataModeOverride()
-
-
-
-
- tests if the data mode is overriden if QROptions::$dataModeOverride is set to a valid value
-
-
- public
- testDataModeOverride ( ) : void
-
-
-
-
-
-
-
-
- see
-
-
- https://github.com/chillerlan/php-qrcode/issues/39
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testDataModeOverrideError()
-
-
-
-
- tests if an exception is thrown when an invalid character occurs when forcing a data mode other than Byte
-
-
- public
- testDataModeOverrideError ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testGetMatrixException()
-
-
-
-
- tests if an exception is thrown when trying to call getMatrix() without data (empty string, no data set)
-
-
- public
- testGetMatrixException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInitDataInterfaceException()
-
-
-
-
- tests if an exception is thrown when an invalid (built-in) output type is specified
-
-
- public
- testInitDataInterfaceException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testIsAlphaNum()
-
-
-
-
- isAlphaNum() should pass on the 45 defined characters and fail on anything else (e.g. lowercase)
-
-
- public
- testIsAlphaNum ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testIsByte()
-
-
-
-
- isByte() passses any binary string and only fails on empty strings
-
-
- public
- testIsByte ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testIsKanji()
-
-
-
-
- isKanji() should pass on Kanji/SJIS characters and fail on everything else
-
-
- public
- testIsKanji ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testIsNumber()
-
-
-
-
- isNumber() should pass on any number and fail on anything else
-
-
- public
- testIsNumber ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/classes/chillerlan-QRCodeTest-QROptionsTest.html b/classes/chillerlan-QRCodeTest-QROptionsTest.html
deleted file mode 100644
index 9c468ccaf..000000000
--- a/classes/chillerlan-QRCodeTest-QROptionsTest.html
+++ /dev/null
@@ -1,541 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROptionsTest
-
-
- extends TestCase
-
-
-
-
-
-
-
-
- QROptions test
-
-
-
-
-
-
-
-
-
-
-
- Table of Contents
-
-
-
-
-
- testClampRGBValues()
-
- : void
-
-Tests clamping of the RGB values for $imageTransparencyBG
-
-
- testInvalidEccLevelException()
-
- : void
-
-Tests if an exception is thrown on an incorrect ECC level
-
-
- testInvalidRGBValueException()
-
- : void
-
-Tests if an exception is thrown when a non-numeric RGB value was encoutered
-
-
- testMaskPatternClamp()
-
- : void
-
-Tests the $maskPattern clamping
-
-
- testVersionClamp()
-
- : void
-
-Tests the $version clamping
-
-
- testVersionMinMaxClamp()
-
- : void
-
-Tests the $versionMin/$versionMax clamping
-
-
-
-
-
-
-
-
-
-
-
-
-
- testClampRGBValues()
-
-
-
-
- Tests clamping of the RGB values for $imageTransparencyBG
-
-
- public
- testClampRGBValues ( array<string|int, mixed> $rgb , array<string|int, mixed> $expected ) : void
-
-
-
- Parameters
-
-
- $rgb
- : array<string|int, mixed>
-
-
-
-
-
- $expected
- : array<string|int, mixed>
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInvalidEccLevelException()
-
-
-
-
- Tests if an exception is thrown on an incorrect ECC level
-
-
- public
- testInvalidEccLevelException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testInvalidRGBValueException()
-
-
-
-
- Tests if an exception is thrown when a non-numeric RGB value was encoutered
-
-
- public
- testInvalidRGBValueException ( ) : void
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testMaskPatternClamp()
-
-
-
-
- Tests the $maskPattern clamping
-
-
- public
- testMaskPatternClamp ( int $maskPattern , int $expected ) : void
-
-
-
- Parameters
-
-
- $maskPattern
- : int
-
-
-
-
-
- $expected
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testVersionClamp()
-
-
-
-
- Tests the $version clamping
-
-
- public
- testVersionClamp ( int $version , int $expected ) : void
-
-
-
- Parameters
-
-
- $version
- : int
-
-
-
-
-
- $expected
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
- testVersionMinMaxClamp()
-
-
-
-
- Tests the $versionMin/$versionMax clamping
-
-
- public
- testVersionMinMaxClamp ( int $versionMin , int $versionMax , int $expectedMin , int $expectedMax ) : void
-
-
-
- Parameters
-
-
- $versionMin
- : int
-
-
-
-
-
- $versionMax
- : int
-
-
-
-
-
- $expectedMin
- : int
-
-
-
-
-
- $expectedMax
- : int
-
-
-
-
-
-
-
-
-
-
- dataProvider
-
-
-
-
-
-
-
-
- Return values
- void
- —
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/composer.json b/composer.json
new file mode 100644
index 000000000..57d6a28e1
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,69 @@
+{
+ "name": "chillerlan/php-qrcode",
+ "description": "A QR code generator. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-qrcode",
+ "license": "MIT",
+ "minimum-stability": "stable",
+ "type": "library",
+ "keywords": [
+ "QR code", "qrcode", "qr", "qrcode-generator", "phpqrcode", "qrcode-reader"
+ ],
+ "authors": [
+ {
+ "name": "Kazuhiko Arase",
+ "homepage": "https://github.com/kazuhikoarase/qrcode-generator"
+ },
+ {
+ "name":"ZXing Authors",
+ "homepage": "https://github.com/zxing/zxing"
+ },
+ {
+ "name": "Ashot Khanamiryan",
+ "homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder"
+ },
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ },
+ {
+ "name": "Contributors",
+ "homepage":"https://github.com/chillerlan/php-qrcode/graphs/contributors"
+ }
+ ],
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "ext-mbstring": "*",
+ "chillerlan/php-settings-container": "^2.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5",
+ "phan/phan": "^5.3",
+ "setasign/fpdf": "^1.8.2"
+ },
+ "suggest": {
+ "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
+ "setasign/fpdf": "Required to use the QR FPDF output."
+ },
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\QRCode\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "chillerlan\\QRCodePublic\\": "public/",
+ "chillerlan\\QRCodeTest\\": "tests/",
+ "chillerlan\\QRCodeExamples\\": "examples/"
+ }
+ },
+ "scripts": {
+ "phpunit": "@php vendor/bin/phpunit",
+ "phan": "@php vendor/bin/phan"
+ },
+ "config": {
+ "lock": false,
+ "sort-packages": true,
+ "platform-check": true
+ }
+}
diff --git a/css/base.css b/css/base.css
deleted file mode 100644
index 3fa8f232f..000000000
--- a/css/base.css
+++ /dev/null
@@ -1,1002 +0,0 @@
-
-:root {
- /* Typography */
- --font-primary: 'Source Sans Pro', Helvetica, Arial, sans-serif;
- --font-secondary: 'Source Sans Pro', Helvetica, Arial, sans-serif;
- --line-height--primary: 1.6;
- --letter-spacing--primary: .05rem;
- --text-base-size: 1em;
- --text-scale-ratio: 1.2;
-
- --text-xxs: calc(var(--text-base-size) / var(--text-scale-ratio) / var(--text-scale-ratio) / var(--text-scale-ratio));
- --text-xs: calc(var(--text-base-size) / var(--text-scale-ratio) / var(--text-scale-ratio));
- --text-sm: calc(var(--text-base-size) / var(--text-scale-ratio));
- --text-md: var(--text-base-size);
- --text-lg: calc(var(--text-base-size) * var(--text-scale-ratio));
- --text-xl: calc(var(--text-base-size) * var(--text-scale-ratio) * var(--text-scale-ratio));
- --text-xxl: calc(var(--text-base-size) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio));
- --text-xxxl: calc(var(--text-base-size) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio));
- --text-xxxxl: calc(var(--text-base-size) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio));
- --text-xxxxxl: calc(var(--text-base-size) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio));
-
- /* Colors */
- --primary-color: hsl(96, 57%, 60%);
- --primary-color-darken: hsl(96, 57%, 40%);
- --primary-color-darker: hsl(96, 57%, 20%);
- --primary-color-lighten: hsl(96, 57%, 80%);
- --primary-color-lighter: hsl(96, 57%, 97%);
- --dark-gray: #d1d1d1;
- --light-gray: #f0f0f0;
-
- --text-color: #4b3b40;
-
- --header-height: var(--spacing-xxxxl);
- --header-bg-color: var(--primary-color);
- --code-background-color: #f7faf5;
- --code-border-color: #d6e7cb;
- --button-border-color: var(--primary-color-darken);
- --button-color: transparent;
- --button-color-primary: var(--primary-color);
- --button-text-color: #555;
- --button-text-color-primary: white;
- --popover-background-color: rgba(255, 255, 255, 0.75);
- --link-color-primary: var(--primary-color-darken);
- --link-hover-color-primary: var(--primary-color-darker);
- --form-field-border-color: var(--dark-gray);
- --form-field-color: #fff;
- --admonition-success-color: var(--primary-color);
- --admonition-border-color: silver;
- --table-separator-color: var(--primary-color-lighten);
- --title-text-color: var(--primary-color);
-
- --sidebar-border-color: var(--primary-color-lighten);
-
- /* Grid */
- --container-width: 1400px;
-
- /* Spacing */
- --spacing-base-size: 1rem;
- --spacing-scale-ratio: 1.5;
-
- --spacing-xxxs: calc(var(--spacing-base-size) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio));
- --spacing-xxs: calc(var(--spacing-base-size) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio));
- --spacing-xs: calc(var(--spacing-base-size) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio));
- --spacing-sm: calc(var(--spacing-base-size) / var(--spacing-scale-ratio));
- --spacing-md: var(--spacing-base-size);
- --spacing-lg: calc(var(--spacing-base-size) * var(--spacing-scale-ratio));
- --spacing-xl: calc(var(--spacing-base-size) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio));
- --spacing-xxl: calc(var(--spacing-base-size) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio));
- --spacing-xxxl: calc(var(--spacing-base-size) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio));
- --spacing-xxxxl: calc(var(--spacing-base-size) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio));
-
- --border-radius-base-size: 3px;
-}
-
-/* Base Styles
--------------------------------------------------- */
-body {
- color: var(--text-color);
- font-family: var(--font-primary);
- font-size: var(--text-md);
- letter-spacing: var(--letter-spacing--primary);
- line-height: var(--line-height--primary);
-}
-
-.phpdocumentor h1,
-.phpdocumentor h2,
-.phpdocumentor h3,
-.phpdocumentor h4,
-.phpdocumentor h5,
-.phpdocumentor h6 {
- margin-bottom: var(--spacing-lg);
- margin-top: var(--spacing-lg);
- font-weight: 600;
-}
-
-.phpdocumentor h1 {
- font-size: var(--text-xxxxl);
- letter-spacing: var(--letter-spacing--primary);
- line-height: 1.2;
- margin-top: 0;
-}
-
-.phpdocumentor h2 {
- font-size: var(--text-xxxl);
- letter-spacing: var(--letter-spacing--primary);
- line-height: 1.25;
- margin-top: 0;
-}
-
-.phpdocumentor h3 {
- font-size: var(--text-xxl);
- letter-spacing: var(--letter-spacing--primary);
- line-height: 1.3;
-}
-
-.phpdocumentor h4 {
- font-size: var(--text-xl);
- letter-spacing: calc(var(--letter-spacing--primary) / 2);
- line-height: 1.35;
- margin-bottom: var(--spacing-md);
-}
-
-.phpdocumentor h5 {
- font-size: var(--text-lg);
- letter-spacing: calc(var(--letter-spacing--primary) / 4);
- line-height: 1.5;
- margin-bottom: var(--spacing-md);
- margin-top: var(--spacing-md);
-}
-
-.phpdocumentor h6 {
- font-size: var(--text-md);
- letter-spacing: 0;
- line-height: var(--line-height--primary);
- margin-bottom: var(--spacing-md);
- margin-top: var(--spacing-md);
-}
-
-.phpdocumentor h1 .headerlink,
-.phpdocumentor h2 .headerlink,
-.phpdocumentor h3 .headerlink,
-.phpdocumentor h4 .headerlink,
-.phpdocumentor h5 .headerlink,
-.phpdocumentor h6 .headerlink
-{
- transition: all .3s ease-in-out;
- opacity: 0;
- text-decoration: none;
- color: silver;
- font-size: 80%;
-}
-
-.phpdocumentor h1:hover .headerlink,
-.phpdocumentor h2:hover .headerlink,
-.phpdocumentor h3:hover .headerlink,
-.phpdocumentor h4:hover .headerlink,
-.phpdocumentor h5:hover .headerlink,
-.phpdocumentor h6:hover .headerlink
-{
- opacity: 1;
-}
-.phpdocumentor p {
- margin-top: 0;
- margin-bottom: var(--spacing-md);
-}
-.phpdocumentor figure {
- margin-bottom: var(--spacing-md);
-}
-.phpdocumentor-line {
- border-top: 1px solid #E1E1E1;
- border-width: 0;
- margin-bottom: var(--spacing-xxl);
- margin-top: var(--spacing-xxl);
-}
-.phpdocumentor-section {
- box-sizing: border-box;
- margin: 0 auto;
- max-width: var(--container-width);
- padding: 0 var(--spacing-lg);
- position: relative;
- width: 100%;
-}
-
-@media (min-width: 1200px) {
- .phpdocumentor-section {
- padding: 0;
- width: 95%;
- }
-}
-.phpdocumentor-column {
- box-sizing: border-box;
- float: left;
- width: 100%;
-}
-
-@media (min-width: 550px) {
- .phpdocumentor-column {
- margin-left: 4%;
- }
-
- .phpdocumentor-column:first-child {
- margin-left: 0;
- }
-
- .-one.phpdocumentor-column {
- width: 4.66666666667%;
- }
-
- .-two.phpdocumentor-column {
- width: 13.3333333333%;
- }
-
- .-three.phpdocumentor-column {
- width: 22%;
- }
-
- .-four.phpdocumentor-column {
- width: 30.6666666667%;
- }
-
- .-five.phpdocumentor-column {
- width: 39.3333333333%;
- }
-
- .-six.phpdocumentor-column {
- width: 48%;
- }
-
- .-seven.phpdocumentor-column {
- width: 56.6666666667%;
- }
-
- .-eight.phpdocumentor-column {
- width: 65.3333333333%;
- }
-
- .-nine.phpdocumentor-column {
- width: 74.0%;
- }
-
- .-ten.phpdocumentor-column {
- width: 82.6666666667%;
- }
-
- .-eleven.phpdocumentor-column {
- width: 91.3333333333%;
- }
-
- .-twelve.phpdocumentor-column {
- margin-left: 0;
- width: 100%;
- }
-
- .-one-third.phpdocumentor-column {
- width: 30.6666666667%;
- }
-
- .-two-thirds.phpdocumentor-column {
- width: 65.3333333333%;
- }
-
- .-one-half.phpdocumentor-column {
- width: 48%;
- }
-
- /* Offsets */
- .-offset-by-one.phpdocumentor-column {
- margin-left: 8.66666666667%;
- }
-
- .-offset-by-two.phpdocumentor-column {
- margin-left: 17.3333333333%;
- }
-
- .-offset-by-three.phpdocumentor-column {
- margin-left: 26%;
- }
-
- .-offset-by-four.phpdocumentor-column {
- margin-left: 34.6666666667%;
- }
-
- .-offset-by-five.phpdocumentor-column {
- margin-left: 43.3333333333%;
- }
-
- .-offset-by-six.phpdocumentor-column {
- margin-left: 52%;
- }
-
- .-offset-by-seven.phpdocumentor-column {
- margin-left: 60.6666666667%;
- }
-
- .-offset-by-eight.phpdocumentor-column {
- margin-left: 69.3333333333%;
- }
-
- .-offset-by-nine.phpdocumentor-column {
- margin-left: 78.0%;
- }
-
- .-offset-by-ten.phpdocumentor-column {
- margin-left: 86.6666666667%;
- }
-
- .-offset-by-eleven.phpdocumentor-column {
- margin-left: 95.3333333333%;
- }
-
- .-offset-by-one-third.phpdocumentor-column {
- margin-left: 34.6666666667%;
- }
-
- .-offset-by-two-thirds.phpdocumentor-column {
- margin-left: 69.3333333333%;
- }
-
- .-offset-by-one-half.phpdocumentor-column {
- margin-left: 52%;
- }
-}
-.phpdocumentor a {
- color: var(--link-color-primary);
-}
-
-.phpdocumentor a:hover {
- color: var(--link-hover-color-primary);
-}
-.phpdocumentor-button {
- background-color: var(--button-color);
- border: 1px solid var(--button-border-color);
- border-radius: var(--border-radius-base-size);
- box-sizing: border-box;
- color: var(--button-text-color);
- cursor: pointer;
- display: inline-block;
- font-size: var(--text-sm);
- font-weight: 600;
- height: 38px;
- letter-spacing: .1rem;
- line-height: 38px;
- padding: 0 var(--spacing-xxl);
- text-align: center;
- text-decoration: none;
- text-transform: uppercase;
- white-space: nowrap;
- margin-bottom: var(--spacing-md);
-}
-
-.phpdocumentor-button .-wide {
- width: 100%;
-}
-
-.phpdocumentor-button:hover,
-.phpdocumentor-button:focus {
- border-color: #888;
- color: #333;
- outline: 0;
-}
-
-.phpdocumentor-button.-primary {
- background-color: var(--button-color-primary);
- border-color: var(--button-color-primary);
- color: var(--button-text-color-primary);
-}
-
-.phpdocumentor-button.-primary:hover,
-.phpdocumentor-button.-primary:focus {
- background-color: var(--link-color-primary);
- border-color: var(--link-color-primary);
- color: var(--button-text-color-primary);
-}
-.phpdocumentor form {
- margin-bottom: var(--spacing-md);
-}
-
-.phpdocumentor-field {
- background-color: var(--form-field-color);
- border: 1px solid var(--form-field-border-color);
- border-radius: var(--border-radius-base-size);
- box-shadow: none;
- box-sizing: border-box;
- height: 38px;
- padding: var(--spacing-xxxs) var(--spacing-xxs); /* The 6px vertically centers text on FF, ignored by Webkit */
- margin-bottom: var(--spacing-md);
-}
-
-/* Removes awkward default styles on some inputs for iOS */
-input[type="email"],
-input[type="number"],
-input[type="search"],
-input[type="text"],
-input[type="tel"],
-input[type="url"],
-input[type="password"],
-textarea {
- -moz-appearance: none;
- -webkit-appearance: none;
- appearance: none;
-}
-
-.phpdocumentor-textarea {
- min-height: 65px;
- padding-bottom: var(--spacing-xxxs);
- padding-top: var(--spacing-xxxs);
-}
-
-.phpdocumentor-field:focus {
- border: 1px solid var(--button-color-primary);
- outline: 0;
-}
-
-.phpdocumentor-label {
- display: block;
- margin-bottom: var(--spacing-xs);
-}
-
-.phpdocumentor-fieldset {
- border-width: 0;
- padding: 0;
-}
-
-input[type="checkbox"].phpdocumentor-field,
-input[type="radio"].phpdocumentor-field {
- display: inline;
-}
-div.phpdocumentor-list > ul,
-ul.phpdocumentor-list {
- list-style: circle inside;
-}
-
-ol.phpdocumentor-list {
- list-style: decimal inside;
-}
-
-div.phpdocumentor-list > ul,
-ol.phpdocumentor-list,
-ul.phpdocumentor-list {
- margin-top: 0;
- padding-left: 0;
- margin-bottom: var(--spacing-md);
-}
-
-dl {
- margin-bottom: var(--spacing-md);
-}
-
-div.phpdocumentor-list > ul ul,
-ul.phpdocumentor-list ul.phpdocumentor-list,
-ul.phpdocumentor-list ol.phpdocumentor-list,
-ol.phpdocumentor-list ol.phpdocumentor-list,
-ol.phpdocumentor-list ul.phpdocumentor-list {
- font-size: var(--text-sm);
- margin: var(--spacing-xs) 0 var(--spacing-xs) calc(var(--spacing-xs) * 2);
-}
-
-li.phpdocumentor-list {
- margin-bottom: var(--spacing-md);
-}
-.phpdocumentor pre {
- margin-bottom: var(--spacing-md);
-}
-
-.phpdocumentor-code {
- background: var(--code-background-color);
- border: 1px solid var(--code-border-color);
- border-radius: var(--border-radius-base-size);
- font-size: var(--text-sm);
- padding: var(--spacing-sm) var(--spacing-md);
- width: 100%;
- box-sizing: border-box;
-}
-
-pre > .phpdocumentor-code {
- display: block;
- white-space: pre;
-}
-.phpdocumentor blockquote {
- border-left: 4px solid var(--primary-color);
- margin: var(--spacing-md) 0;
- padding: var(--spacing-xs) var(--spacing-sm);
- color: var(--primary-color-darker);
- font-style: italic;
- font-size: var(--text-sm);
-}
-.phpdocumentor table {
- margin-bottom: var(--spacing-md);
-}
-
-th.phpdocumentor-heading,
-td.phpdocumentor-cell {
- border-bottom: 1px solid var(--table-separator-color);
- padding: var(--spacing-sm) var(--spacing-md);
- text-align: left;
-}
-
-th.phpdocumentor-heading:first-child,
-td.phpdocumentor-cell:first-child {
- padding-left: 0;
-}
-
-th.phpdocumentor-heading:last-child,
-td.phpdocumentor-cell:last-child {
- padding-right: 0;
-}
-
-.phpdocumentor-header {
- display: flex;
- flex-direction: row;
- align-items: stretch;
- flex-wrap: wrap;
- justify-content: space-between;
- height: auto;
- padding: var(--spacing-md) var(--spacing-md);
-}
-
-.phpdocumentor-header__menu-button {
- position: absolute;
- top: -100%;
- left: -100%;
-}
-
-.phpdocumentor-header__menu-icon {
- font-size: 2rem;
- color: var(--primary-color);
-}
-
-.phpdocumentor-header__menu-button:checked ~ .phpdocumentor-topnav {
- max-height: 250px;
- padding-top: var(--spacing-md);
-}
-
-@media (min-width: 1000px) {
- .phpdocumentor-header {
- flex-direction: row;
- padding: var(--spacing-lg) var(--spacing-lg);
- min-height: var(--header-height);
- }
-
- .phpdocumentor-header__menu-icon {
- display: none;
- }
-}
-
-@media (min-width: 1000px) {
- .phpdocumentor-header {
- padding-top: 0;
- padding-bottom: 0;
- }
-}
-@media (min-width: 1200px) {
- .phpdocumentor-header {
- padding: 0;
- }
-}
-.phpdocumentor-title {
- box-sizing: border-box;
- color: var(--title-text-color);
- font-size: var(--text-xxl);
- letter-spacing: .05rem;
- font-weight: normal;
- width: auto;
- margin: 0;
- display: flex;
- align-items: center;
-}
-
-.phpdocumentor-title.-without-divider {
- border: none;
-}
-
-.phpdocumentor-title__link {
- transition: all .3s ease-out;
- display: flex;
- color: var(--title-text-color);
- text-decoration: none;
- font-weight: normal;
- white-space: nowrap;
- transform: scale(.75);
- transform-origin: left;
-}
-
-.phpdocumentor-title__link:hover {
- transform: perspective(15rem) translateX(.5rem);
- font-weight: 600;
-}
-
-@media (min-width: 1000px) {
- .phpdocumentor-title {
- width: 30.6666666667%;
- border-right: var(--sidebar-border-color) solid 1px;
- }
-
- .phpdocumentor-title__link {
- transform-origin: left;
- }
-}
-
-@media (min-width: 1000px) {
- .phpdocumentor-title__link {
- transform: scale(.85);
- }
-}
-
-@media (min-width: 1200px) {
- .phpdocumentor-title__link {
- transform: scale(1);
- }
-}
-.phpdocumentor-topnav {
- display: flex;
- align-items: center;
- margin: 0;
- max-height: 0;
- overflow: hidden;
- transition: max-height 0.2s ease-out;
- flex-basis: 100%;
-}
-
-.phpdocumentor-topnav__menu {
- text-align: right;
- list-style: none;
- margin: 0;
- padding: 0;
- flex: 1;
- display: flex;
- flex-flow: row wrap;
- justify-content: center;
-}
-
-.phpdocumentor-topnav__menu-item {
- margin: 0;
- width: 100%;
- display: inline-block;
- text-align: center;
- padding: var(--spacing-sm) 0
-}
-
-.phpdocumentor-topnav__menu-item.-social {
- width: auto;
- padding: var(--spacing-sm)
-}
-
-.phpdocumentor-topnav__menu-item a {
- display: inline-block;
- color: var(--text-color);
- text-decoration: none;
- font-size: var(--text-lg);
- transition: all .3s ease-out;
- border-bottom: 1px dotted transparent;
- line-height: 1;
-}
-
-.phpdocumentor-topnav__menu-item a:hover {
- transform: perspective(15rem) translateY(.1rem);
- border-bottom: 1px dotted var(--text-color);
-}
-
-@media (min-width: 1000px) {
- .phpdocumentor-topnav {
- max-height: none;
- overflow: visible;
- flex-basis: auto;
- }
-
- .phpdocumentor-topnav__menu {
- display: flex;
- flex-flow: row wrap;
- justify-content: flex-end;
- }
-
- .phpdocumentor-topnav__menu-item,
- .phpdocumentor-topnav__menu-item.-social {
- width: auto;
- display: inline;
- text-align: right;
- padding: 0 0 0 var(--spacing-md)
- }
-}
-.phpdocumentor-sidebar {
- margin: 0;
- overflow: hidden;
- max-height: 0;
-}
-
-.phpdocumentor .phpdocumentor-sidebar .phpdocumentor-list {
- padding-top: var(--spacing-xs);
- padding-left: var(--spacing-md);
- list-style: none;
-}
-
-.phpdocumentor .phpdocumentor-sidebar li {
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- padding: 0 0 var(--spacing-xxxs) var(--spacing-md);
-}
-
-.phpdocumentor .phpdocumentor-sidebar abbr,
-.phpdocumentor .phpdocumentor-sidebar a {
- text-decoration: none;
- border-bottom: none;
- color: var(--text-color);
- font-size: var(--text-md);
- padding-left: 0;
- transition: padding-left .4s ease-out;
-}
-
-.phpdocumentor .phpdocumentor-sidebar a:hover {
- padding-left: 5px;
- font-weight: 600;
-}
-
-.phpdocumentor .phpdocumentor-sidebar__category > * {
- border-left: 1px solid var(--primary-color-lighten);
-}
-
-.phpdocumentor .phpdocumentor-sidebar__category {
- margin-bottom: var(--spacing-lg);
-}
-
-.phpdocumentor .phpdocumentor-sidebar__category-header {
- font-size: var(--text-md);
- margin-bottom: var(--spacing-xs);
- color: var(--link-color-primary);
- font-weight: 600;
- border-left: 0;
-}
-
-.phpdocumentor .phpdocumentor-sidebar__root-package,
-.phpdocumentor .phpdocumentor-sidebar__root-namespace {
- font-size: var(--text-md);
- margin: 0;
- padding-top: var(--spacing-xs);
- padding-left: var(--spacing-md);
- color: var(--text-color);
- font-weight: normal;
-}
-
-@media (min-width: 550px) {
- .phpdocumentor-sidebar {
- border-right: var(--sidebar-border-color) solid 1px;
- }
-}
-
-.phpdocumentor-sidebar__menu-button {
- position: absolute;
- top: -100%;
- left: -100%;
-}
-
-.phpdocumentor-sidebar__menu-icon {
- font-size: var(--text-md);
- font-weight: 600;
- background: var(--primary-color);
- color: white;
- margin: 0 0 var(--spacing-lg);
- display: block;
- padding: var(--spacing-sm);
- text-align: center;
- border-radius: 3px;
- text-transform: uppercase;
- letter-spacing: .15rem;
-}
-
-.phpdocumentor-sidebar__menu-button:checked ~ .phpdocumentor-sidebar {
- max-height: 100%;
- padding-top: var(--spacing-md);
-}
-
-@media (min-width: 550px) {
- .phpdocumentor-sidebar {
- overflow: visible;
- max-height: 100%;
- }
-
- .phpdocumentor-sidebar__menu-icon {
- display: none;
- }
-}
-.phpdocumentor-admonition {
- border: 1px solid var(--admonition-border-color);
- border-radius: var(--border-radius-base-size);
- border-color: var(--primary-color-lighten);
- background-color: var(--primary-color-lighter);
- font-size: 85%;
- padding: .5rem;
- margin: 2rem 0;
- display: flex;
- flex-direction: row;
-}
-
-.phpdocumentor-admonition--success {
- border-color: var(--admonition-success-color);
-}
-
-.phpdocumentor-admonition__icon {
- font-size: 2rem;
- margin: .75rem 0.75rem 1.25rem 0.5rem;
- color: var(--primary-color);
-}
-.phpdocumentor ul.phpdocumentor-breadcrumbs {
- font-size: var(--text-md);
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-.phpdocumentor ul.phpdocumentor-breadcrumbs a {
- color: var(--text-color);
- text-decoration: none;
-}
-
-.phpdocumentor ul.phpdocumentor-breadcrumbs > li {
- display: inline-block;
- margin: 0;
-}
-
-.phpdocumentor ul.phpdocumentor-breadcrumbs > li + li:before {
- color: var(--dark-gray);
- content: "\\\A0";
- padding: 0;
-}
-.phpdocumentor .phpdocumentor-back-to-top {
- position: fixed;
- bottom: 2rem;
- font-size: 2.5rem;
- opacity: .25;
- transition: all .3s ease-in-out;
- right: 2rem;
-}
-
-.phpdocumentor .phpdocumentor-back-to-top:hover {
- color: var(--link-color-primary);
- opacity: 1;
-}
-.phpdocumentor-search {
- position: relative;
- display: none; /** disable by default for non-js flow */
- opacity: .3; /** white-out default for loading indication */
- transition: opacity .3s, background .3s;
- margin: var(--spacing-sm) 0;
- flex: 1;
- min-width: 100%;
-}
-
-.phpdocumentor-search label {
- display: flex;
- align-items: center;
- flex: 1;
-}
-
-.phpdocumentor-search__icon {
- color: var(--primary-color);
- margin-right: var(--spacing-sm);
- width: 1rem;
- height: 1rem;
-}
-
-.phpdocumentor-search--enabled {
- display: flex;
-}
-
-.phpdocumentor-search--active {
- opacity: 1;
-}
-
-.phpdocumentor-search input:disabled {
- background-color: lightgray;
-}
-
-.phpdocumentor-search__field:focus,
-.phpdocumentor-search__field {
- margin-bottom: 0;
- border: 0;
- border-bottom: 2px solid var(--primary-color);
- padding: 0;
- border-radius: 0;
- flex: 1;
-}
-
-@media (min-width: 1000px) {
- .phpdocumentor-search {
- min-width: auto;
- max-width: 20rem;
- margin: 0 0 0 auto;
- }
-}
-.phpdocumentor-content {
- position: relative;
-}
-
-.phpdocumentor-search-results {
- backdrop-filter: blur(5px);
- background: var(--popover-background-color);
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- padding: 0;
- opacity: 1;
- pointer-events: all;
-
- transition: opacity .3s, background .3s;
-}
-
-.phpdocumentor-search-results--hidden {
- background: transparent;
- backdrop-filter: blur(0);
- opacity: 0;
- pointer-events: none;
-}
-
-.phpdocumentor-search-results__dialog {
- width: 100%;
- background: white;
- max-height: 100%;
- display: flex;
- flex-direction: column;
-}
-
-.phpdocumentor-search-results__body {
- overflow: auto;
-}
-
-.phpdocumentor-search-results__header {
- padding: var(--spacing-lg);
- display: flex;
- justify-content: space-between;
- background: var(--primary-color-darken);
- color: white;
- align-items: center;
-}
-
-.phpdocumentor-search-results__close {
- font-size: var(--text-xl);
- background: none;
- border: none;
- padding: 0;
- margin: 0;
-}
-
-.phpdocumentor .phpdocumentor-search-results__title {
- font-size: var(--text-xl);
- margin-bottom: 0;
-}
-
-.phpdocumentor-search-results__entries {
- list-style: none;
- padding: 0 var(--spacing-lg);
- margin: 0;
-}
-
-.phpdocumentor-search-results__entry {
- border-bottom: 1px solid var(--table-separator-color);
- padding: var(--spacing-sm) 0;
- text-align: left;
-}
-
-.phpdocumentor-search-results__entry a {
- display: block;
-}
-
-.phpdocumentor-search-results__entry small {
- margin-top: var(--spacing-xs);
- margin-bottom: var(--spacing-md);
- color: var(--primary-color-darker);
- display: block;
- word-break: break-word;
-}
-
-.phpdocumentor-search-results__entry h3 {
- font-size: var(--text-lg);
- margin: 0;
-}
-
-@media (min-width: 550px) {
- .phpdocumentor-search-results {
- padding: 0 var(--spacing-lg);
- }
-
- .phpdocumentor-search-results__entry h3 {
- font-size: var(--text-xxl);
- }
-
- .phpdocumentor-search-results__dialog {
- margin: var(--spacing-xl) auto;
- max-width: 40rem;
- background: white;
- border: 1px solid silver;
- box-shadow: 0 2px 5px silver;
- max-height: 40rem;
- border-radius: 3px;
- }
-}
-
-/* Used for screen readers and such */
-.visually-hidden {
- display: none;
-}
diff --git a/css/normalize.css b/css/normalize.css
deleted file mode 100644
index 46f646a5c..000000000
--- a/css/normalize.css
+++ /dev/null
@@ -1,427 +0,0 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS text size adjust after orientation change, without disabling
- * user zoom.
- */
-
-html {
- font-family: sans-serif; /* 1 */
- -ms-text-size-adjust: 100%; /* 2 */
- -webkit-text-size-adjust: 100%; /* 2 */
-}
-
-/**
- * Remove default margin.
- */
-
-body {
- margin: 0;
-}
-
-/* HTML5 display definitions
- ========================================================================== */
-
-/**
- * Correct `block` display not defined for any HTML5 element in IE 8/9.
- * Correct `block` display not defined for `details` or `summary` in IE 10/11
- * and Firefox.
- * Correct `block` display not defined for `main` in IE 11.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-
-/**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
- */
-
-audio,
-canvas,
-progress,
-video {
- display: inline-block; /* 1 */
- vertical-align: baseline; /* 2 */
-}
-
-/**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-
-/**
- * Address `[hidden]` styling not present in IE 8/9/10.
- * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
- */
-
-[hidden],
-template {
- display: none;
-}
-
-/* Links
- ========================================================================== */
-
-/**
- * Remove the gray background color from active links in IE 10.
- */
-
-a {
- background-color: transparent;
-}
-
-/**
- * Improve readability when focused and also mouse hovered in all browsers.
- */
-
-a:active,
-a:hover {
- outline: 0;
-}
-
-/* Text-level semantics
- ========================================================================== */
-
-/**
- * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
- */
-
-abbr[title] {
- border-bottom: 1px dotted;
-}
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
- */
-
-b,
-strong {
- font-weight: bold;
-}
-
-/**
- * Address styling not present in Safari and Chrome.
- */
-
-dfn {
- font-style: italic;
-}
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari, and Chrome.
- */
-
-h1 {
- font-size: 2em;
- margin: 0.67em 0;
-}
-
-/**
- * Address styling not present in IE 8/9.
- */
-
-mark {
- background: #ff0;
- color: #000;
-}
-
-/**
- * Address inconsistent and variable font size in all browsers.
- */
-
-small {
- font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
- */
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-/* Embedded content
- ========================================================================== */
-
-/**
- * Remove border when inside `a` element in IE 8/9/10.
- */
-
-img {
- border: 0;
-}
-
-/**
- * Correct overflow not hidden in IE 9/10/11.
- */
-
-svg:not(:root) {
- overflow: hidden;
-}
-
-/* Grouping content
- ========================================================================== */
-
-/**
- * Address margin not present in IE 8/9 and Safari.
- */
-
-figure {
- margin: 1em 40px;
-}
-
-/**
- * Address differences between Firefox and other browsers.
- */
-
-hr {
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- height: 0;
-}
-
-/**
- * Contain overflow in all browsers.
- */
-
-pre {
- overflow: auto;
-}
-
-/**
- * Address odd `em`-unit font size rendering in all browsers.
- */
-
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-
-/* Forms
- ========================================================================== */
-
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-
-/**
- * 1. Correct color not being inherited.
- * Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
- */
-
-button,
-input,
-optgroup,
-select,
-textarea {
- color: inherit; /* 1 */
- font: inherit; /* 2 */
- margin: 0; /* 3 */
-}
-
-/**
- * Address `overflow` set to `hidden` in IE 8/9/10/11.
- */
-
-button {
- overflow: visible;
-}
-
-/**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
- * Correct `select` style inheritance in Firefox.
- */
-
-button,
-select {
- text-transform: none;
-}
-
-/**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- * and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- * `input` and others.
- */
-
-button,
-html input[type="button"], /* 1 */
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button; /* 2 */
- cursor: pointer; /* 3 */
-}
-
-/**
- * Re-set default cursor for disabled elements.
- */
-
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-
-input {
- line-height: normal;
-}
-
-/**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
- */
-
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
- */
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
- * (include `-moz` to future-proof).
- */
-
-input[type="search"] {
- -webkit-appearance: textfield; /* 1 */
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box; /* 2 */
- box-sizing: content-box;
-}
-
-/**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
- */
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/**
- * Define consistent border, margin, and padding.
- */
-
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
-}
-
-/**
- * 1. Correct `color` not being inherited in IE 8/9/10/11.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-
-legend {
- border: 0; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Remove default vertical scrollbar in IE 8/9/10/11.
- */
-
-textarea {
- overflow: auto;
-}
-
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
- */
-
-optgroup {
- font-weight: bold;
-}
-
-/* Tables
- ========================================================================== */
-
-/**
- * Remove most spacing between table cells.
- */
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-td,
-th {
- padding: 0;
-}
diff --git a/css/template.css b/css/template.css
deleted file mode 100644
index fb905f3d7..000000000
--- a/css/template.css
+++ /dev/null
@@ -1,169 +0,0 @@
-.phpdocumentor-summary {
- font-style: italic;
-}
-.phpdocumentor-description {
- margin-bottom: var(--spacing-md);
-}
-.phpdocumentor-element {
- position: relative;
-}
-
-.phpdocumentor .phpdocumentor-element__name {
- line-height: 1;
-}
-
-.phpdocumentor-element__package,
-.phpdocumentor-element__extends,
-.phpdocumentor-element__implements {
- display: block;
- font-size: var(--text-xxs);
- font-weight: normal;
- opacity: .7;
-}
-
-.phpdocumentor-element__package .phpdocumentor-breadcrumbs {
- display: inline;
-}
-
-.phpdocumentor-element:not(:last-child) {
- border-bottom: 1px solid var(--primary-color-lighten);
- padding-bottom: var(--spacing-lg);
-}
-
-.phpdocumentor-element.-deprecated .phpdocumentor-element__name {
- text-decoration: line-through;
-}
-
-.phpdocumentor-element__modifier {
- font-size: var(--text-xxs);
- padding: calc(var(--spacing-base-size) / 4) calc(var(--spacing-base-size) / 2);
- color: var(--text-color);
- background-color: var(--light-gray);
- border-radius: 3px;
- text-transform: uppercase;
-}
-.phpdocumentor-signature {
- display: inline-block;
- font-size: var(--text-sm);
- margin-bottom: var(--spacing-md);
-}
-
-.phpdocumentor-signature.-deprecated .phpdocumentor-signature__name {
- text-decoration: line-through;
-}
-.phpdocumentor-table-of-contents {
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry {
- padding-top: var(--spacing-xs);
- margin-left: 2rem;
- display: flex;
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry > a {
- flex: 0 1 auto;
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry > span {
- flex: 1;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry:after {
- content: '';
- height: 12px;
- width: 12px;
- left: 16px;
- position: absolute;
-}
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-private:after {
- background: url('data:image/svg+xml;utf8, ') no-repeat;
-}
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-protected:after {
- left: 13px;
- background: url('data:image/svg+xml;utf8, ') no-repeat;
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry:before {
- width: 1.25rem;
- height: 1.25rem;
- line-height: 1.25rem;
- background: transparent url('data:image/svg+xml;utf8, ') no-repeat center center;
- content: '';
- position: absolute;
- left: 0;
- border-radius: 50%;
- font-weight: 600;
- color: white;
- text-align: center;
- font-size: .75rem;
- margin-top: .2rem;
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-method:before {
- content: 'M';
- background-image: url('data:image/svg+xml;utf8, ');
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-function:before {
- content: 'M';
- background-image: url('data:image/svg+xml;utf8, ');
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-property:before {
- content: 'P'
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-constant:before {
- content: 'C';
- background-color: transparent;
- background-image: url('data:image/svg+xml;utf8, ');
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-class:before {
- content: 'C'
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-interface:before {
- content: 'I'
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-trait:before {
- content: 'T'
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-namespace:before {
- content: 'N'
-}
-
-.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-package:before {
- content: 'P'
-}
-
-.phpdocumentor-table-of-contents dd {
- font-style: italic;
- margin-left: 2rem;
-}
-.phpdocumentor-element-found-in {
- position: absolute;
- top: 0;
- right: 0;
- font-size: var(--text-sm);
- color: gray;
-}
-.phpdocumentor-class-graph {
- width: 100%; height: 600px; border:1px solid black; overflow: hidden
-}
-
-.phpdocumentor-class-graph__graph {
- width: 100%;
-}
-.phpdocumentor-tag-list__definition {
- display: flex;
-}
-
-.phpdocumentor-tag-link {
- margin-right: var(--spacing-sm);
-}
diff --git a/descriptors/+/4/J79V3i35xFrOCD3MiGVw b/descriptors/+/4/J79V3i35xFrOCD3MiGVw
deleted file mode 100644
index 8bc0051ba..000000000
Binary files a/descriptors/+/4/J79V3i35xFrOCD3MiGVw and /dev/null differ
diff --git a/descriptors/+/P/Nl7ssh3KKeR8HtBtXT5Q b/descriptors/+/P/Nl7ssh3KKeR8HtBtXT5Q
deleted file mode 100644
index 13b3079c1..000000000
Binary files a/descriptors/+/P/Nl7ssh3KKeR8HtBtXT5Q and /dev/null differ
diff --git a/descriptors/-/2/48fvzRKW4dY1KC87BcHQ b/descriptors/-/2/48fvzRKW4dY1KC87BcHQ
deleted file mode 100644
index 5c17c1100..000000000
Binary files a/descriptors/-/2/48fvzRKW4dY1KC87BcHQ and /dev/null differ
diff --git a/descriptors/-/6/dsuPpGr0KRU0shpxjEmw b/descriptors/-/6/dsuPpGr0KRU0shpxjEmw
deleted file mode 100644
index 046f915e1..000000000
Binary files a/descriptors/-/6/dsuPpGr0KRU0shpxjEmw and /dev/null differ
diff --git a/descriptors/-/W/J7Vz6259gygGeqhbnvng b/descriptors/-/W/J7Vz6259gygGeqhbnvng
deleted file mode 100644
index 8b69efb48..000000000
Binary files a/descriptors/-/W/J7Vz6259gygGeqhbnvng and /dev/null differ
diff --git a/descriptors/0/S/hP-3wfw-DWJwFelVyg1w b/descriptors/0/S/hP-3wfw-DWJwFelVyg1w
deleted file mode 100644
index 923d7bdcf..000000000
Binary files a/descriptors/0/S/hP-3wfw-DWJwFelVyg1w and /dev/null differ
diff --git a/descriptors/3/D/98dT1rEobyqeXPwJohlQ b/descriptors/3/D/98dT1rEobyqeXPwJohlQ
deleted file mode 100644
index 0ef740fa6..000000000
Binary files a/descriptors/3/D/98dT1rEobyqeXPwJohlQ and /dev/null differ
diff --git a/descriptors/7/B/QD-dwvOVQnRBkabHURTg b/descriptors/7/B/QD-dwvOVQnRBkabHURTg
deleted file mode 100644
index 5e4a21aff..000000000
Binary files a/descriptors/7/B/QD-dwvOVQnRBkabHURTg and /dev/null differ
diff --git a/descriptors/9/S/nvQbFP5M0NhRY+U5h5Zg b/descriptors/9/S/nvQbFP5M0NhRY+U5h5Zg
deleted file mode 100644
index e5c97d5c8..000000000
Binary files a/descriptors/9/S/nvQbFP5M0NhRY+U5h5Zg and /dev/null differ
diff --git a/descriptors/B/I/P+u+dyr6fYJ5H49nVFpw b/descriptors/B/I/P+u+dyr6fYJ5H49nVFpw
deleted file mode 100644
index c5d3df5c3..000000000
Binary files a/descriptors/B/I/P+u+dyr6fYJ5H49nVFpw and /dev/null differ
diff --git a/descriptors/C/X/lCjLpRx-jv80J2lTXAdA b/descriptors/C/X/lCjLpRx-jv80J2lTXAdA
deleted file mode 100644
index 4d36974fb..000000000
Binary files a/descriptors/C/X/lCjLpRx-jv80J2lTXAdA and /dev/null differ
diff --git a/descriptors/E/N/7J1HzR2rAmelj40DCtRQ b/descriptors/E/N/7J1HzR2rAmelj40DCtRQ
deleted file mode 100644
index 796336a0a..000000000
Binary files a/descriptors/E/N/7J1HzR2rAmelj40DCtRQ and /dev/null differ
diff --git a/descriptors/F/F/ytYkFa+I+GXzyMa6GMLQ b/descriptors/F/F/ytYkFa+I+GXzyMa6GMLQ
deleted file mode 100644
index 205a7271c..000000000
Binary files a/descriptors/F/F/ytYkFa+I+GXzyMa6GMLQ and /dev/null differ
diff --git a/descriptors/F/G/uRaGX24I-0IrjNHzU2Aw b/descriptors/F/G/uRaGX24I-0IrjNHzU2Aw
deleted file mode 100644
index 897b4ccd0..000000000
Binary files a/descriptors/F/G/uRaGX24I-0IrjNHzU2Aw and /dev/null differ
diff --git a/descriptors/F/M/wgT07ZSpNOFubqhJ3NaQ b/descriptors/F/M/wgT07ZSpNOFubqhJ3NaQ
deleted file mode 100644
index c52f08a0e..000000000
Binary files a/descriptors/F/M/wgT07ZSpNOFubqhJ3NaQ and /dev/null differ
diff --git a/descriptors/G/P/0wRp4Gms9emiOfjnPbFg b/descriptors/G/P/0wRp4Gms9emiOfjnPbFg
deleted file mode 100644
index 915265812..000000000
Binary files a/descriptors/G/P/0wRp4Gms9emiOfjnPbFg and /dev/null differ
diff --git a/descriptors/K/3/YL+YrFq67XBsu73+nZAQ b/descriptors/K/3/YL+YrFq67XBsu73+nZAQ
deleted file mode 100644
index 8cbbfcedd..000000000
Binary files a/descriptors/K/3/YL+YrFq67XBsu73+nZAQ and /dev/null differ
diff --git a/descriptors/L/C/fZPr+WdSHDWS5Vi0hKmQ b/descriptors/L/C/fZPr+WdSHDWS5Vi0hKmQ
deleted file mode 100644
index 6f518c937..000000000
Binary files a/descriptors/L/C/fZPr+WdSHDWS5Vi0hKmQ and /dev/null differ
diff --git a/descriptors/M/Z/NowDQuJ6Wpkqe5R2xHxg b/descriptors/M/Z/NowDQuJ6Wpkqe5R2xHxg
deleted file mode 100644
index 630699f4d..000000000
Binary files a/descriptors/M/Z/NowDQuJ6Wpkqe5R2xHxg and /dev/null differ
diff --git a/descriptors/N/K/h9ZQJCH1sL3GOJzIP6YQ b/descriptors/N/K/h9ZQJCH1sL3GOJzIP6YQ
deleted file mode 100644
index 9abea9614..000000000
Binary files a/descriptors/N/K/h9ZQJCH1sL3GOJzIP6YQ and /dev/null differ
diff --git a/descriptors/O/I/CZLeEQ9UjGtpZp16duNw b/descriptors/O/I/CZLeEQ9UjGtpZp16duNw
deleted file mode 100644
index 1c5315c6d..000000000
Binary files a/descriptors/O/I/CZLeEQ9UjGtpZp16duNw and /dev/null differ
diff --git a/descriptors/P/+/3qYqDzXLQc6xrFQb2VVw b/descriptors/P/+/3qYqDzXLQc6xrFQb2VVw
deleted file mode 100644
index 6cf0062e6..000000000
Binary files a/descriptors/P/+/3qYqDzXLQc6xrFQb2VVw and /dev/null differ
diff --git a/descriptors/P/I/JTEhTSYSeSlmRi0Omfjw b/descriptors/P/I/JTEhTSYSeSlmRi0Omfjw
deleted file mode 100644
index c7fb82575..000000000
Binary files a/descriptors/P/I/JTEhTSYSeSlmRi0Omfjw and /dev/null differ
diff --git a/descriptors/Q/B/N8soEBwr-MXLUTj+AOSQ b/descriptors/Q/B/N8soEBwr-MXLUTj+AOSQ
deleted file mode 100644
index 831e7a68d..000000000
Binary files a/descriptors/Q/B/N8soEBwr-MXLUTj+AOSQ and /dev/null differ
diff --git a/descriptors/Q/L/xB66VhzNbapI7FEkTA1w b/descriptors/Q/L/xB66VhzNbapI7FEkTA1w
deleted file mode 100644
index 24a107fb8..000000000
Binary files a/descriptors/Q/L/xB66VhzNbapI7FEkTA1w and /dev/null differ
diff --git a/descriptors/R/F/IeoKYlOO9nPr1oc173IQ b/descriptors/R/F/IeoKYlOO9nPr1oc173IQ
deleted file mode 100644
index 1af095e6f..000000000
Binary files a/descriptors/R/F/IeoKYlOO9nPr1oc173IQ and /dev/null differ
diff --git a/descriptors/R/N/CcNtK2zlYqzXaX4BWc7Q b/descriptors/R/N/CcNtK2zlYqzXaX4BWc7Q
deleted file mode 100644
index 25e253d4f..000000000
Binary files a/descriptors/R/N/CcNtK2zlYqzXaX4BWc7Q and /dev/null differ
diff --git a/descriptors/R/U/VshQMVuxG1q6j0UdoNzA b/descriptors/R/U/VshQMVuxG1q6j0UdoNzA
deleted file mode 100644
index b6b097d2c..000000000
Binary files a/descriptors/R/U/VshQMVuxG1q6j0UdoNzA and /dev/null differ
diff --git a/descriptors/S/5/hz2fZQCFSiAF4iuUv8Wg b/descriptors/S/5/hz2fZQCFSiAF4iuUv8Wg
deleted file mode 100644
index 490313911..000000000
Binary files a/descriptors/S/5/hz2fZQCFSiAF4iuUv8Wg and /dev/null differ
diff --git a/descriptors/S/J/C6T1auhsGT3+MMq1K5-A b/descriptors/S/J/C6T1auhsGT3+MMq1K5-A
deleted file mode 100644
index 04deb31b3..000000000
Binary files a/descriptors/S/J/C6T1auhsGT3+MMq1K5-A and /dev/null differ
diff --git a/descriptors/S/S/PbPhSosYXWe4m22+XDEA b/descriptors/S/S/PbPhSosYXWe4m22+XDEA
deleted file mode 100644
index 7bc90af27..000000000
Binary files a/descriptors/S/S/PbPhSosYXWe4m22+XDEA and /dev/null differ
diff --git a/descriptors/T/G/EVonPeEo1Pxf+oUfneiw b/descriptors/T/G/EVonPeEo1Pxf+oUfneiw
deleted file mode 100644
index 76822103e..000000000
--- a/descriptors/T/G/EVonPeEo1Pxf+oUfneiw
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-LpGsUSVZxt%3AphpDocumentor-projectDescriptor-filelist
-a:40:{i:0;s:70:"phpDocumentor-projectDescriptor-files-6e4f69c48ba9cbe306a6007c692f0ffe";i:1;s:70:"phpDocumentor-projectDescriptor-files-8ff9f516ac8e54a3b2246fa2744d92d7";i:2;s:70:"phpDocumentor-projectDescriptor-files-f26a0846c840be604a792acafaeee293";i:3;s:70:"phpDocumentor-projectDescriptor-files-df42cd88fecffe804b2371f7c58a3f7f";i:4;s:70:"phpDocumentor-projectDescriptor-files-51b9053c73b0b532c33480987e362b6d";i:5;s:70:"phpDocumentor-projectDescriptor-files-e0f9ff4335e7dcabde94b24b5b3d838d";i:6;s:70:"phpDocumentor-projectDescriptor-files-789032e7d1724604ae5104a7ce0e89db";i:7;s:70:"phpDocumentor-projectDescriptor-files-726e195427c9d19fd16b85863921fb3d";i:8;s:70:"phpDocumentor-projectDescriptor-files-1f67fbce112198c37c55fe3ebdfe2599";i:9;s:70:"phpDocumentor-projectDescriptor-files-3db9168bac2313bc61c4acfed1ce1036";i:10;s:70:"phpDocumentor-projectDescriptor-files-d4de4c60838bf3ee18fa3ede3e4daff2";i:11;s:70:"phpDocumentor-projectDescriptor-files-b35ca0c182d9df96f981d1ed731e6eff";i:12;s:70:"phpDocumentor-projectDescriptor-files-b31d16eab64d6e98936bd9a7132dee28";i:13;s:70:"phpDocumentor-projectDescriptor-files-f4fbe9a5ba07da4c5dd136e0ca43f3de";i:14;s:70:"phpDocumentor-projectDescriptor-files-6efe3acfed58500c89222069397f57be";i:15;s:70:"phpDocumentor-projectDescriptor-files-2759f30a0c3ac842ba1fbfad5040960d";i:16;s:70:"phpDocumentor-projectDescriptor-files-818aad68a0071bd9554b3a113878be07";i:17;s:70:"phpDocumentor-projectDescriptor-files-a3598badc79d62dd0a7188eed330d15f";i:18;s:70:"phpDocumentor-projectDescriptor-files-908f984026aba14f9c4eb5f8b5309120";i:19;s:70:"phpDocumentor-projectDescriptor-files-b424b588535732c9c0ee9c87d872cd3e";i:20;s:70:"phpDocumentor-projectDescriptor-files-401116d23a0230fa80932e4cc8aefad0";i:21;s:70:"phpDocumentor-projectDescriptor-files-d8b72682d00611500144fd349e7e2b22";i:22;s:70:"phpDocumentor-projectDescriptor-files-e821eb855be9bafd757aab41d206fdb2";i:23;s:70:"phpDocumentor-projectDescriptor-files-c0227aab7b13ad115cf8cc086003c2c6";i:24;s:70:"phpDocumentor-projectDescriptor-files-d3b407fc3811ef470d3585d96693e51c";i:25;s:70:"phpDocumentor-projectDescriptor-files-a1f6779869c09e75ad1f94f294dd9ca2";i:26;s:70:"phpDocumentor-projectDescriptor-files-f59b8ac8a723058061167f1458eba522";i:27;s:70:"phpDocumentor-projectDescriptor-files-f3f46f468250a7a8e739390164fb97fe";i:28;s:70:"phpDocumentor-projectDescriptor-files-46061bb33edfde59b98188cceddc9b13";i:29;s:70:"phpDocumentor-projectDescriptor-files-517f664c9d4b66de958e7810bb791d32";i:30;s:70:"phpDocumentor-projectDescriptor-files-2e3323021f002ba34a9011727eff8f7b";i:31;s:70:"phpDocumentor-projectDescriptor-files-bb63657107496ce9060908640154e6fc";i:32;s:70:"phpDocumentor-projectDescriptor-files-b776832d0b3df88872bae4fe1e49dd65";i:33;s:70:"phpDocumentor-projectDescriptor-files-697a91ef3e75c0b0a5f0fe17b5004a5d";i:34;s:70:"phpDocumentor-projectDescriptor-files-4fb7bb7759cd104c674b9c264f688bc5";i:35;s:70:"phpDocumentor-projectDescriptor-files-17db8f965a78c479fa69beeda56ede1c";i:36;s:70:"phpDocumentor-projectDescriptor-files-3aa6c1954bc7440479ae9c89c6a6035c";i:37;s:70:"phpDocumentor-projectDescriptor-files-9e8b63b8c6df7e879ebac500607b3c00";i:38;s:70:"phpDocumentor-projectDescriptor-files-f6854c7cef3b34bb696e660ac106b5aa";i:39;s:70:"phpDocumentor-projectDescriptor-files-42d091db9bd6f5eff8687eb5f9cf707d";}
\ No newline at end of file
diff --git a/descriptors/U/6/iT8KA-K8K4HIkEsavo6g b/descriptors/U/6/iT8KA-K8K4HIkEsavo6g
deleted file mode 100644
index 75e3cf552..000000000
Binary files a/descriptors/U/6/iT8KA-K8K4HIkEsavo6g and /dev/null differ
diff --git a/descriptors/V/B/GuS6YKZ8HZqdagVtzcRg b/descriptors/V/B/GuS6YKZ8HZqdagVtzcRg
deleted file mode 100644
index a6e00d8f5..000000000
Binary files a/descriptors/V/B/GuS6YKZ8HZqdagVtzcRg and /dev/null differ
diff --git a/descriptors/V/L/OKmU7hO-Oao2jo+DZYGQ b/descriptors/V/L/OKmU7hO-Oao2jo+DZYGQ
deleted file mode 100644
index db021f50b..000000000
Binary files a/descriptors/V/L/OKmU7hO-Oao2jo+DZYGQ and /dev/null differ
diff --git a/descriptors/V/R/ZLRqZLUQd-m3IJdFrwBA b/descriptors/V/R/ZLRqZLUQd-m3IJdFrwBA
deleted file mode 100644
index 505e0ace2..000000000
Binary files a/descriptors/V/R/ZLRqZLUQd-m3IJdFrwBA and /dev/null differ
diff --git a/descriptors/W/N/L+QXygcwKJaB7dH45vPg b/descriptors/W/N/L+QXygcwKJaB7dH45vPg
deleted file mode 100644
index 8ff803050..000000000
Binary files a/descriptors/W/N/L+QXygcwKJaB7dH45vPg and /dev/null differ
diff --git a/descriptors/X/F/5yk6Q4asFeNyGb30gflg b/descriptors/X/F/5yk6Q4asFeNyGb30gflg
deleted file mode 100644
index cebd38e11..000000000
Binary files a/descriptors/X/F/5yk6Q4asFeNyGb30gflg and /dev/null differ
diff --git a/descriptors/X/M/AQTB6J48qvn76mGyNoKw b/descriptors/X/M/AQTB6J48qvn76mGyNoKw
deleted file mode 100644
index c673d981c..000000000
Binary files a/descriptors/X/M/AQTB6J48qvn76mGyNoKw and /dev/null differ
diff --git a/descriptors/X/N/yghCcdQgJSZ7s5qRqEjA b/descriptors/X/N/yghCcdQgJSZ7s5qRqEjA
deleted file mode 100644
index e58555102..000000000
Binary files a/descriptors/X/N/yghCcdQgJSZ7s5qRqEjA and /dev/null differ
diff --git a/descriptors/Z/I/Sh5a6AZjBROajRPjUj7g b/descriptors/Z/I/Sh5a6AZjBROajRPjUj7g
deleted file mode 100644
index 860ebc237..000000000
Binary files a/descriptors/Z/I/Sh5a6AZjBROajRPjUj7g and /dev/null differ
diff --git a/descriptors/Z/O/j-yFKwIIbe5cKnQL0WTg b/descriptors/Z/O/j-yFKwIIbe5cKnQL0WTg
deleted file mode 100644
index d056a2ef2..000000000
Binary files a/descriptors/Z/O/j-yFKwIIbe5cKnQL0WTg and /dev/null differ
diff --git a/examples/MyCustomOutput.php b/examples/MyCustomOutput.php
new file mode 100644
index 000000000..40f4aae2b
--- /dev/null
+++ b/examples/MyCustomOutput.php
@@ -0,0 +1,36 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\Output\QROutputAbstract;
+
+class MyCustomOutput extends QROutputAbstract{
+
+ protected function setModuleValues():void{
+ // TODO: Implement setModuleValues() method.
+ }
+
+ public function dump(string $file = null):string{
+
+ $output = '';
+
+ for($row = 0; $row < $this->moduleCount; $row++){
+ for($col = 0; $col < $this->moduleCount; $col++){
+ $output .= (int)$this->matrix->check($col, $row);
+ }
+
+ $output .= \PHP_EOL;
+ }
+
+ return $output;
+ }
+
+}
diff --git a/examples/QRImageWithLogo.php b/examples/QRImageWithLogo.php
new file mode 100644
index 000000000..ac2dacadd
--- /dev/null
+++ b/examples/QRImageWithLogo.php
@@ -0,0 +1,79 @@
+
+ * @copyright 2020 smiley
+ * @license MIT
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\Output\{QRCodeOutputException, QRImage};
+
+use function imagecopyresampled, imagecreatefrompng, imagesx, imagesy, is_file, is_readable;
+
+/**
+ * @property \chillerlan\QRCodeExamples\LogoOptions $options
+ */
+class QRImageWithLogo extends QRImage{
+
+ /**
+ * @param string|null $file
+ * @param string|null $logo
+ *
+ * @return string
+ * @throws \chillerlan\QRCode\Output\QRCodeOutputException
+ */
+ public function dump(string $file = null, string $logo = null):string{
+ // set returnResource to true to skip further processing for now
+ $this->options->returnResource = true;
+
+ // of course you could accept other formats too (such as resource or Imagick)
+ // i'm not checking for the file type either for simplicity reasons (assuming PNG)
+ if(!is_file($logo) || !is_readable($logo)){
+ throw new QRCodeOutputException('invalid logo');
+ }
+
+ $this->matrix->setLogoSpace(
+ $this->options->logoSpaceWidth,
+ $this->options->logoSpaceHeight
+ // not utilizing the position here
+ );
+
+ // there's no need to save the result of dump() into $this->image here
+ parent::dump($file);
+
+ $im = imagecreatefrompng($logo);
+
+ // get logo image size
+ $w = imagesx($im);
+ $h = imagesy($im);
+
+ // set new logo size, leave a border of 1 module (no proportional resize/centering)
+ $lw = ($this->options->logoSpaceWidth - 2) * $this->options->scale;
+ $lh = ($this->options->logoSpaceHeight - 2) * $this->options->scale;
+
+ // get the qrcode size
+ $ql = $this->matrix->size() * $this->options->scale;
+
+ // scale the logo and copy it over. done!
+ imagecopyresampled($this->image, $im, ($ql - $lw) / 2, ($ql - $lh) / 2, 0, 0, $lw, $lh, $w, $h);
+
+ $imageData = $this->dumpImage();
+
+ if($file !== null){
+ $this->saveToFile($imageData, $file);
+ }
+
+ if($this->options->imageBase64){
+ $imageData = $this->base64encode($imageData, 'image/'.$this->options->outputType);
+ }
+
+ return $imageData;
+ }
+
+}
diff --git a/examples/QRImageWithText.php b/examples/QRImageWithText.php
new file mode 100644
index 000000000..b5971bdf1
--- /dev/null
+++ b/examples/QRImageWithText.php
@@ -0,0 +1,98 @@
+
+ * @copyright 2019 smiley
+ * @license MIT
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\Output\QRImage;
+
+use function imagechar, imagecolorallocate, imagecolortransparent, imagecopymerge, imagecreatetruecolor,
+ imagedestroy, imagefilledrectangle, imagefontwidth, in_array, round, str_split, strlen;
+
+class QRImageWithText extends QRImage{
+
+ /**
+ * @param string|null $file
+ * @param string|null $text
+ *
+ * @return string
+ */
+ public function dump(string $file = null, string $text = null):string{
+ // set returnResource to true to skip further processing for now
+ $this->options->returnResource = true;
+
+ // there's no need to save the result of dump() into $this->image here
+ parent::dump($file);
+
+ // render text output if a string is given
+ if($text !== null){
+ $this->addText($text);
+ }
+
+ $imageData = $this->dumpImage();
+
+ if($file !== null){
+ $this->saveToFile($imageData, $file);
+ }
+
+ if($this->options->imageBase64){
+ $imageData = $this->base64encode($imageData, 'image/'.$this->options->outputType);
+ }
+
+ return $imageData;
+ }
+
+ /**
+ * @param string $text
+ */
+ protected function addText(string $text):void{
+ // save the qrcode image
+ $qrcode = $this->image;
+
+ // options things
+ $textSize = 3; // see imagefontheight() and imagefontwidth()
+ $textBG = [200, 200, 200];
+ $textColor = [50, 50, 50];
+
+ $bgWidth = $this->length;
+ $bgHeight = $bgWidth + 20; // 20px extra space
+
+ // create a new image with additional space
+ $this->image = imagecreatetruecolor($bgWidth, $bgHeight);
+ $background = imagecolorallocate($this->image, ...$textBG);
+
+ // allow transparency
+ if($this->options->imageTransparent && in_array($this->options->outputType, $this::TRANSPARENCY_TYPES, true)){
+ imagecolortransparent($this->image, $background);
+ }
+
+ // fill the background
+ imagefilledrectangle($this->image, 0, 0, $bgWidth, $bgHeight, $background);
+
+ // copy over the qrcode
+ imagecopymerge($this->image, $qrcode, 0, 0, 0, 0, $this->length, $this->length, 100);
+ imagedestroy($qrcode);
+
+ $fontColor = imagecolorallocate($this->image, ...$textColor);
+ $w = imagefontwidth($textSize);
+ $x = round(($bgWidth - strlen($text) * $w) / 2);
+
+ // loop through the string and draw the letters
+ foreach(str_split($text) as $i => $chr){
+ imagechar($this->image, $textSize, (int)($i * $w + $x), $this->length, $chr, $fontColor);
+ }
+ }
+
+}
diff --git a/examples/custom_output.php b/examples/custom_output.php
new file mode 100644
index 000000000..175b5b86e
--- /dev/null
+++ b/examples/custom_output.php
@@ -0,0 +1,40 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Common\EccLevel;
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+// invoke the QROutputInterface manually
+$options = new QROptions([
+ 'version' => 5,
+ 'eccLevel' => EccLevel::L,
+]);
+
+$qrcode = new QRCode($options);
+$qrcode->addByteSegment($data);
+
+$qrOutputInterface = new MyCustomOutput($options, $qrcode->getMatrix());
+
+var_dump($qrOutputInterface->dump());
+
+
+// or just
+$options = new QROptions([
+ 'version' => 5,
+ 'eccLevel' => EccLevel::L,
+ 'outputType' => QRCode::OUTPUT_CUSTOM,
+ 'outputInterface' => MyCustomOutput::class,
+]);
+
+var_dump((new QRCode($options))->render($data));
diff --git a/examples/fpdf.php b/examples/fpdf.php
new file mode 100644
index 000000000..a693df725
--- /dev/null
+++ b/examples/fpdf.php
@@ -0,0 +1,49 @@
+ 7,
+ 'outputType' => QRCode::OUTPUT_FPDF,
+ 'eccLevel' => EccLevel::L,
+ 'scale' => 5,
+ 'imageBase64' => false,
+ 'moduleValues' => [
+ // finder
+ QRMatrix::M_FINDER | QRMatrix::IS_DARK => [0, 63, 255], // dark (true)
+ QRMatrix::M_FINDER => [255, 255, 255], // light (false), white is the transparency color and is enabled by default
+ // alignment
+ QRMatrix::M_ALIGNMENT | QRMatrix::IS_DARK => [255, 0, 255],
+ QRMatrix::M_ALIGNMENT => [255, 255, 255],
+ // timing
+ QRMatrix::M_TIMING | QRMatrix::IS_DARK => [255, 0, 0],
+ QRMatrix::M_TIMING => [255, 255, 255],
+ // format
+ QRMatrix::M_FORMAT | QRMatrix::IS_DARK => [67, 191, 84],
+ QRMatrix::M_FORMAT => [255, 255, 255],
+ // version
+ QRMatrix::M_VERSION | QRMatrix::IS_DARK => [62, 174, 190],
+ QRMatrix::M_VERSION => [255, 255, 255],
+ // data
+ QRMatrix::M_DATA | QRMatrix::IS_DARK => [0, 0, 0],
+ QRMatrix::M_DATA => [255, 255, 255],
+ // darkmodule
+ QRMatrix::M_DARKMODULE | QRMatrix::IS_DARK => [0, 0, 0],
+ // separator
+ QRMatrix::M_SEPARATOR => [255, 255, 255],
+ // quietzone
+ QRMatrix::M_QUIETZONE => [255, 255, 255],
+ ],
+]);
+
+\header('Content-type: application/pdf');
+
+echo (new QRCode($options))->render($data);
diff --git a/examples/html.php b/examples/html.php
new file mode 100644
index 000000000..5ac189136
--- /dev/null
+++ b/examples/html.php
@@ -0,0 +1,90 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\Common\EccLevel;
+
+require_once '../vendor/autoload.php';
+
+header('Content-Type: text/html; charset=utf-8');
+
+?>
+
+
+
+
+
+ QRCode test
+
+
+
+ 5,
+ 'outputType' => QRCode::OUTPUT_MARKUP_HTML,
+ 'eccLevel' => EccLevel::L,
+ 'cssClass' => 'qrcode',
+ 'moduleValues' => [
+ // finder
+ QRMatrix::M_FINDER | QRMatrix::IS_DARK => '#A71111', // dark (true)
+ QRMatrix::M_FINDER => '#FFBFBF', // light (false)
+ QRMatrix::M_FINDER_DOT | QRMatrix::IS_DARK => '#A71111', // finder dot, dark (true)
+ // alignment
+ QRMatrix::M_ALIGNMENT | QRMatrix::IS_DARK => '#A70364',
+ QRMatrix::M_ALIGNMENT => '#FFC9C9',
+ // timing
+ QRMatrix::M_TIMING | QRMatrix::IS_DARK => '#98005D',
+ QRMatrix::M_TIMING => '#FFB8E9',
+ // format
+ QRMatrix::M_FORMAT | QRMatrix::IS_DARK => '#003804',
+ QRMatrix::M_FORMAT => '#00FB12',
+ // version
+ QRMatrix::M_VERSION | QRMatrix::IS_DARK => '#650098',
+ QRMatrix::M_VERSION => '#E0B8FF',
+ // data
+ QRMatrix::M_DATA | QRMatrix::IS_DARK => '#4A6000',
+ QRMatrix::M_DATA => '#ECF9BE',
+ // darkmodule
+ QRMatrix::M_DARKMODULE | QRMatrix::IS_DARK => '#080063',
+ // separator
+ QRMatrix::M_SEPARATOR => '#AFBFBF',
+ // quietzone
+ QRMatrix::M_QUIETZONE => '#DDDDDD',
+ ],
+ ]);
+
+ echo (new QRCode($options))->render($data);
+
+?>
+
+
+
+
+
diff --git a/examples/image.php b/examples/image.php
new file mode 100644
index 000000000..bbb0c20a1
--- /dev/null
+++ b/examples/image.php
@@ -0,0 +1,63 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\Common\EccLevel;
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+$options = new QROptions([
+ 'version' => 5,
+ 'outputType' => QRCode::OUTPUT_IMAGE_PNG,
+ 'eccLevel' => EccLevel::L,
+ 'scale' => 5,
+ 'imageBase64' => false,
+ 'moduleValues' => [
+ // finder
+ QRMatrix::M_FINDER | QRMatrix::IS_DARK => [0, 63, 255], // dark (true)
+ QRMatrix::M_FINDER => [255, 255, 255], // light (false), white is the transparency color and is enabled by default
+ QRMatrix::M_FINDER_DOT | QRMatrix::IS_DARK => [241, 28, 163], // finder dot, dark (true)
+ // alignment
+ QRMatrix::M_ALIGNMENT | QRMatrix::IS_DARK => [255, 0, 255],
+ QRMatrix::M_ALIGNMENT => [255, 255, 255],
+ // timing
+ QRMatrix::M_TIMING | QRMatrix::IS_DARK => [255, 0, 0],
+ QRMatrix::M_TIMING => [255, 255, 255],
+ // format
+ QRMatrix::M_FORMAT | QRMatrix::IS_DARK => [67, 99, 84],
+ QRMatrix::M_FORMAT => [255, 255, 255],
+ // version
+ QRMatrix::M_VERSION | QRMatrix::IS_DARK => [62, 174, 190],
+ QRMatrix::M_VERSION => [255, 255, 255],
+ // data
+ QRMatrix::M_DATA | QRMatrix::IS_DARK => [0, 0, 0],
+ QRMatrix::M_DATA => [255, 255, 255],
+ // darkmodule
+ QRMatrix::M_DARKMODULE | QRMatrix::IS_DARK => [0, 0, 0],
+ // separator
+ QRMatrix::M_SEPARATOR => [255, 255, 255],
+ // quietzone
+ QRMatrix::M_QUIETZONE => [255, 255, 255],
+ // logo (requires a call to QRMatrix::setLogoSpace()), see QRImageWithLogo
+ QRMatrix::M_LOGO => [255, 255, 255],
+ ],
+]);
+
+header('Content-type: image/png');
+
+echo (new QRCode($options))->render($data);
+
+
+
+
+
diff --git a/examples/imageWithLogo.php b/examples/imageWithLogo.php
new file mode 100644
index 000000000..7aabdc021
--- /dev/null
+++ b/examples/imageWithLogo.php
@@ -0,0 +1,47 @@
+
+ * @copyright 2020 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Common\EccLevel;
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+/**
+ * @property int $logoSpaceWidth
+ * @property int $logoSpaceHeight
+ *
+ * @noinspection PhpIllegalPsrClassPathInspection
+ */
+class LogoOptions extends QROptions{
+ // size in QR modules, multiply with QROptions::$scale for pixel size
+ protected int $logoSpaceWidth;
+ protected int $logoSpaceHeight;
+}
+
+$options = new LogoOptions;
+
+$options->version = 7;
+$options->eccLevel = EccLevel::H;
+$options->imageBase64 = false;
+$options->logoSpaceWidth = 13;
+$options->logoSpaceWidth = 13;
+$options->scale = 5;
+$options->imageTransparent = false;
+
+$qrcode = new QRCode($options);
+$qrcode->addByteSegment($data);
+
+header('Content-type: image/png');
+
+$qrOutputInterface = new QRImageWithLogo($options, $qrcode->getMatrix());
+
+// dump the output, with an additional logo
+echo $qrOutputInterface->dump(null, __DIR__.'/octocat.png');
diff --git a/examples/imageWithText.php b/examples/imageWithText.php
new file mode 100644
index 000000000..0f040f79e
--- /dev/null
+++ b/examples/imageWithText.php
@@ -0,0 +1,35 @@
+
+ * @copyright 2019 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+$options = new QROptions([
+ 'version' => 7,
+ 'outputType' => QRCode::OUTPUT_IMAGE_PNG,
+ 'scale' => 3,
+ 'imageBase64' => false,
+]);
+
+$qrcode = new QRCode($options);
+$qrcode->addByteSegment($data);
+
+header('Content-type: image/png');
+
+$qrOutputInterface = new QRImageWithText($options, $qrcode->getMatrix());
+
+// dump the output, with additional text
+echo $qrOutputInterface->dump(null, 'example text');
diff --git a/examples/imagick.php b/examples/imagick.php
new file mode 100644
index 000000000..ea8af1d57
--- /dev/null
+++ b/examples/imagick.php
@@ -0,0 +1,60 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\Common\EccLevel;
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+$options = new QROptions([
+ 'version' => 7,
+ 'outputType' => QRCode::OUTPUT_IMAGICK,
+ 'eccLevel' => EccLevel::L,
+ 'scale' => 5,
+ 'moduleValues' => [
+ // finder
+ QRMatrix::M_FINDER | QRMatrix::IS_DARK => '#A71111', // dark (true)
+ QRMatrix::M_FINDER => '#FFBFBF', // light (false)
+ QRMatrix::M_FINDER_DOT | QRMatrix::IS_DARK => '#A71111', // finder dot, dark (true)
+ // alignment
+ QRMatrix::M_ALIGNMENT | QRMatrix::IS_DARK => '#A70364',
+ QRMatrix::M_ALIGNMENT => '#FFC9C9',
+ // timing
+ QRMatrix::M_TIMING | QRMatrix::IS_DARK => '#98005D',
+ QRMatrix::M_TIMING => '#FFB8E9',
+ // format
+ QRMatrix::M_FORMAT | QRMatrix::IS_DARK => '#003804',
+ QRMatrix::M_FORMAT => '#00FB12',
+ // version
+ QRMatrix::M_VERSION | QRMatrix::IS_DARK => '#650098',
+ QRMatrix::M_VERSION => '#E0B8FF',
+ // data
+ QRMatrix::M_DATA | QRMatrix::IS_DARK => '#4A6000',
+ QRMatrix::M_DATA => '#ECF9BE',
+ // darkmodule
+ QRMatrix::M_DARKMODULE | QRMatrix::IS_DARK => '#080063',
+ // separator
+ QRMatrix::M_SEPARATOR => '#DDDDDD',
+ // quietzone
+ QRMatrix::M_QUIETZONE => '#DDDDDD',
+ ],
+]);
+
+header('Content-type: image/png');
+
+echo (new QRCode($options))->render($data);
+
+
+
+
+
diff --git a/examples/octocat.png b/examples/octocat.png
new file mode 100644
index 000000000..f9050b935
Binary files /dev/null and b/examples/octocat.png differ
diff --git a/examples/svg.php b/examples/svg.php
new file mode 100644
index 000000000..63cb54552
--- /dev/null
+++ b/examples/svg.php
@@ -0,0 +1,79 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\Common\EccLevel;
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+$gzip = true;
+
+$options = new QROptions([
+ 'version' => 7,
+ 'outputType' => QRCode::OUTPUT_MARKUP_SVG,
+ 'imageBase64' => false,
+ 'eccLevel' => EccLevel::L,
+ 'svgViewBoxSize' => 530,
+ 'addQuietzone' => true,
+ 'cssClass' => 'my-css-class',
+ 'svgOpacity' => 1.0,
+ 'svgDefs' => '
+
+
+
+
+
+
+
+
+ ',
+ 'moduleValues' => [
+ // finder
+ QRMatrix::M_FINDER | QRMatrix::IS_DARK => 'url(#g1)', // dark (true)
+ QRMatrix::M_FINDER => '#fff', // light (false)
+ QRMatrix::M_FINDER_DOT | QRMatrix::IS_DARK => 'url(#g2)', // finder dot, dark (true)
+ // alignment
+ QRMatrix::M_ALIGNMENT | QRMatrix::IS_DARK => 'url(#g1)',
+ QRMatrix::M_ALIGNMENT => '#fff',
+ // timing
+ QRMatrix::M_TIMING | QRMatrix::IS_DARK => 'url(#g1)',
+ QRMatrix::M_TIMING => '#fff',
+ // format
+ QRMatrix::M_FORMAT | QRMatrix::IS_DARK => 'url(#g1)',
+ QRMatrix::M_FORMAT => '#fff',
+ // version
+ QRMatrix::M_VERSION | QRMatrix::IS_DARK => 'url(#g1)',
+ QRMatrix::M_VERSION => '#fff',
+ // data
+ QRMatrix::M_DATA | QRMatrix::IS_DARK => 'url(#g2)',
+ QRMatrix::M_DATA => '#fff',
+ // darkmodule
+ QRMatrix::M_DARKMODULE | QRMatrix::IS_DARK => 'url(#g1)',
+ // separator
+ QRMatrix::M_SEPARATOR => '#fff',
+ // quietzone
+ QRMatrix::M_QUIETZONE => '#fff',
+ ],
+]);
+
+$qrcode = (new QRCode($options))->render($data);
+
+header('Content-type: image/svg+xml');
+
+if($gzip === true){
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ $qrcode = gzencode($qrcode, 9);
+}
+echo $qrcode;
+
+
diff --git a/examples/text.php b/examples/text.php
new file mode 100644
index 000000000..bc24ddf28
--- /dev/null
+++ b/examples/text.php
@@ -0,0 +1,69 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\Common\EccLevel;
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+$options = new QROptions([
+ 'version' => 5,
+ 'outputType' => QRCode::OUTPUT_STRING_TEXT,
+ 'eccLevel' => EccLevel::L,
+]);
+
+// to view it in a browser
+echo ''.(new QRCode($options))->render($data).' ';
+
+
+// custom values
+$options = new QROptions([
+ 'version' => 5,
+ 'outputType' => QRCode::OUTPUT_STRING_TEXT,
+ 'eccLevel' => EccLevel::L,
+ 'moduleValues' => [
+ // finder
+ QRMatrix::M_FINDER | QRMatrix::IS_DARK => 'A', // dark (true)
+ QRMatrix::M_FINDER => 'a', // light (false)
+ QRMatrix::M_FINDER_DOT | QRMatrix::IS_DARK => 'ä', // finder dot, dark (true)
+ // alignment
+ QRMatrix::M_ALIGNMENT | QRMatrix::IS_DARK => 'B',
+ QRMatrix::M_ALIGNMENT => 'b',
+ // timing
+ QRMatrix::M_TIMING | QRMatrix::IS_DARK => 'C',
+ QRMatrix::M_TIMING => 'c',
+ // format
+ QRMatrix::M_FORMAT | QRMatrix::IS_DARK => 'D',
+ QRMatrix::M_FORMAT => 'd',
+ // version
+ QRMatrix::M_VERSION | QRMatrix::IS_DARK => 'E',
+ QRMatrix::M_VERSION => 'e',
+ // data
+ QRMatrix::M_DATA | QRMatrix::IS_DARK => 'F',
+ QRMatrix::M_DATA => 'f',
+ // darkmodule
+ QRMatrix::M_DARKMODULE | QRMatrix::IS_DARK => 'G',
+ // separator
+ QRMatrix::M_SEPARATOR => 'h',
+ // quietzone
+ QRMatrix::M_QUIETZONE => 'i',
+ ],
+]);
+
+// to view it in a browser
+echo ''.(new QRCode($options))->render($data).' ';
+
+
+
+
+
diff --git a/files/+/F/1DqPUqnVuY6LZG9ijkUA b/files/+/F/1DqPUqnVuY6LZG9ijkUA
deleted file mode 100644
index 4b54955d6..000000000
--- a/files/+/F/1DqPUqnVuY6LZG9ijkUA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A789032e7d1724604ae5104a7ce0e89db-0c6bdfc06325bc9cfb96b48a02164d0d
-s:80944:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjA6IkNsYXNzIFFSRGF0YUFic3RyYWN0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjY6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE4OiJRUkRhdGFBYnN0cmFjdC5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIyNS4xMS4yMDE1IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyMjoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNSBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiMGM2YmRmYzA2MzI1YmM5Y2ZiOTZiNDhhMDIxNjRkMGQiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxODoiUVJEYXRhQWJzdHJhY3QucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6Mjc6InNyYy9EYXRhL1FSRGF0YUFic3RyYWN0LnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6NzM4MzoiPD9waHAKLyoqCiAqIENsYXNzIFFSRGF0YUFic3RyYWN0CiAqCiAqIEBmaWxlc291cmNlICAgUVJEYXRhQWJzdHJhY3QucGhwCiAqIEBjcmVhdGVkICAgICAgMjUuMTEuMjAxNQogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlXERhdGEKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxEYXRhOwoKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTsKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNce0JpdEJ1ZmZlciwgUG9seW5vbWlhbH07CnVzZSBjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2ZpbGwsIGFycmF5X21lcmdlLCBjb3VudCwgbWF4LCBtYl9jb252ZXJ0X2VuY29kaW5nLCBtYl9kZXRlY3RfZW5jb2RpbmcsIHJhbmdlLCBzcHJpbnRmLCBzdHJsZW47CgovKioKICogUHJvY2Vzc2VzIHRoZSBiaW5hcnkgZGF0YSBhbmQgbWFwcyBpdCBvbiBhIG1hdHJpeCB3aGljaCBpcyB0aGVuIGJlaW5nIHJldHVybmVkCiAqLwphYnN0cmFjdCBjbGFzcyBRUkRhdGFBYnN0cmFjdCBpbXBsZW1lbnRzIFFSRGF0YUludGVyZmFjZXsKCgkvKioKCSAqIHRoZSBzdHJpbmcgYnl0ZSBjb3VudAoJICovCglwcm90ZWN0ZWQgP2ludCAkc3RybGVuID0gbnVsbDsKCgkvKioKCSAqIHRoZSBjdXJyZW50IGRhdGEgbW9kZTogTnVtLCBBbHBoYW51bSwgS2FuamksIEJ5dGUKCSAqLwoJcHJvdGVjdGVkIGludCAkZGF0YW1vZGU7CgoJLyoqCgkgKiBtb2RlIGxlbmd0aCBiaXRzIGZvciB0aGUgdmVyc2lvbiBicmVha3BvaW50cyAxLTksIDEwLTI2IGFuZCAyNy00MAoJICoKCSAqIElTTy9JRUMgMTgwMDQ6MjAwMCBUYWJsZSAzIC0gTnVtYmVyIG9mIGJpdHMgaW4gQ2hhcmFjdGVyIENvdW50IEluZGljYXRvcgoJICovCglwcm90ZWN0ZWQgYXJyYXkgJGxlbmd0aEJpdHMgPSBbMCwgMCwgMF07CgoJLyoqCgkgKiBjdXJyZW50IFFSIENvZGUgdmVyc2lvbgoJICovCglwcm90ZWN0ZWQgaW50ICR2ZXJzaW9uOwoKCS8qKgoJICogRUNDIHRlbXAgZGF0YQoJICovCglwcm90ZWN0ZWQgYXJyYXkgJGVjZGF0YTsKCgkvKioKCSAqIEVDQyB0ZW1wIGRhdGEKCSAqLwoJcHJvdGVjdGVkIGFycmF5ICRkY2RhdGE7CgoJLyoqCgkgKiB0aGUgb3B0aW9ucyBpbnN0YW5jZQoJICoKCSAqIEB2YXIgXGNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2V8XGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucwoJICovCglwcm90ZWN0ZWQgU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UgJG9wdGlvbnM7CgoJLyoqCgkgKiBhIEJpdEJ1ZmZlciBpbnN0YW5jZQoJICovCglwcm90ZWN0ZWQgQml0QnVmZmVyICRiaXRCdWZmZXI7CgoJLyoqCgkgKiBRUkRhdGFJbnRlcmZhY2UgY29uc3RydWN0b3IuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZSAkb3B0aW9ucywgc3RyaW5nICRkYXRhID0gbnVsbCl7CgkJJHRoaXMtPm9wdGlvbnMgPSAkb3B0aW9uczsKCgkJaWYoJGRhdGEgIT09IG51bGwpewoJCQkkdGhpcy0+c2V0RGF0YSgkZGF0YSk7CgkJfQoJfQoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldERhdGEoc3RyaW5nICRkYXRhKTpRUkRhdGFJbnRlcmZhY2V7CgoJCWlmKCR0aGlzLT5kYXRhbW9kZSA9PT0gUVJDb2RlOjpEQVRBX0tBTkpJKXsKCQkJJGRhdGEgPSBtYl9jb252ZXJ0X2VuY29kaW5nKCRkYXRhLCAnU0pJUycsIG1iX2RldGVjdF9lbmNvZGluZygkZGF0YSkpOwoJCX0KCgkJJHRoaXMtPnN0cmxlbiAgPSAkdGhpcy0+Z2V0TGVuZ3RoKCRkYXRhKTsKCQkkdGhpcy0+dmVyc2lvbiA9ICR0aGlzLT5vcHRpb25zLT52ZXJzaW9uID09PSBRUkNvZGU6OlZFUlNJT05fQVVUTwoJCQk/ICR0aGlzLT5nZXRNaW5pbXVtVmVyc2lvbigpCgkJCTogJHRoaXMtPm9wdGlvbnMtPnZlcnNpb247CgoJCSR0aGlzLT53cml0ZUJpdEJ1ZmZlcigkZGF0YSk7CgoJCXJldHVybiAkdGhpczsKCX0KCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpbml0TWF0cml4KGludCAkbWFza1BhdHRlcm4sIGJvb2wgJHRlc3QgPSBudWxsKTpRUk1hdHJpeHsKCQlyZXR1cm4gKG5ldyBRUk1hdHJpeCgkdGhpcy0+dmVyc2lvbiwgJHRoaXMtPm9wdGlvbnMtPmVjY0xldmVsKSkKCQkJLT5pbml0KCRtYXNrUGF0dGVybiwgJHRlc3QpCgkJCS0+bWFwRGF0YSgkdGhpcy0+bWFza0VDQygpLCAkbWFza1BhdHRlcm4pCgkJOwoJfQoKCS8qKgoJICogcmV0dXJucyB0aGUgbGVuZ3RoIGJpdHMgZm9yIHRoZSB2ZXJzaW9uIGJyZWFrcG9pbnRzIDEtOSwgMTAtMjYgYW5kIDI3LTQwCgkgKgoJICogQHRocm93cyBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkNvZGVEYXRhRXhjZXB0aW9uCgkgKiBAY29kZUNvdmVyYWdlSWdub3JlCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRMZW5ndGhCaXRzKCk6aW50ewoKCQkgZm9yZWFjaChbOSwgMjYsIDQwXSBhcyAka2V5ID0+ICRicmVha3BvaW50KXsKCQkJIGlmKCR0aGlzLT52ZXJzaW9uIDw9ICRicmVha3BvaW50KXsKCQkJCSByZXR1cm4gJHRoaXMtPmxlbmd0aEJpdHNbJGtleV07CgkJCSB9CgkJIH0KCgkJdGhyb3cgbmV3IFFSQ29kZURhdGFFeGNlcHRpb24oc3ByaW50ZignaW52YWxpZCB2ZXJzaW9uIG51bWJlcjogJWQnLCAkdGhpcy0+dmVyc2lvbikpOwoJfQoKCS8qKgoJICogcmV0dXJucyB0aGUgYnl0ZSBjb3VudCBvZiB0aGUgJGRhdGEgc3RyaW5nCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRMZW5ndGgoc3RyaW5nICRkYXRhKTppbnR7CgkJcmV0dXJuIHN0cmxlbigkZGF0YSk7Cgl9CgoJLyoqCgkgKiByZXR1cm5zIHRoZSBtaW5pbXVtIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgZ2l2ZW4gc3RyaW5nCgkgKgoJICogQHRocm93cyBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkNvZGVEYXRhRXhjZXB0aW9uCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRNaW5pbXVtVmVyc2lvbigpOmludHsKCQkkbWF4bGVuZ3RoID0gMDsKCgkJLy8gZ3Vlc3MgdGhlIHZlcnNpb24gbnVtYmVyIHdpdGhpbiB0aGUgZ2l2ZW4gcmFuZ2UKCQkkZGF0YU1vZGUgPSBRUkNvZGU6OkRBVEFfTU9ERVNbJHRoaXMtPmRhdGFtb2RlXTsKCQkkZWNjTW9kZSAgPSBRUkNvZGU6OkVDQ19NT0RFU1skdGhpcy0+b3B0aW9ucy0+ZWNjTGV2ZWxdOwoKCQlmb3JlYWNoKHJhbmdlKCR0aGlzLT5vcHRpb25zLT52ZXJzaW9uTWluLCAkdGhpcy0+b3B0aW9ucy0+dmVyc2lvbk1heCkgYXMgJHZlcnNpb24pewoJCQkkbWF4bGVuZ3RoID0gJHRoaXM6Ok1BWF9MRU5HVEhbJHZlcnNpb25dWyRkYXRhTW9kZV1bJGVjY01vZGVdOwoKCQkJaWYoJHRoaXMtPnN0cmxlbiA8PSAkbWF4bGVuZ3RoKXsKCQkJCXJldHVybiAkdmVyc2lvbjsKCQkJfQoJCX0KCgkJdGhyb3cgbmV3IFFSQ29kZURhdGFFeGNlcHRpb24oc3ByaW50ZignZGF0YSBleGNlZWRzICVkIGNoYXJhY3RlcnMnLCAkbWF4bGVuZ3RoKSk7Cgl9CgoJLyoqCgkgKiB3cml0ZXMgdGhlIGFjdHVhbCBkYXRhIHN0cmluZyB0byB0aGUgQml0QnVmZmVyCgkgKgoJICogQHNlZSBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6d3JpdGVCaXRCdWZmZXIoKQoJICovCglhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gd3JpdGUoc3RyaW5nICRkYXRhKTp2b2lkOwoKCS8qKgoJICogY3JlYXRlcyBhIEJpdEJ1ZmZlciBhbmQgd3JpdGVzIHRoZSBzdHJpbmcgZGF0YSB0byBpdAoJICoKCSAqIEB0aHJvd3MgXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZUV4Y2VwdGlvbiBvbiBkYXRhIG92ZXJmbG93CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiB3cml0ZUJpdEJ1ZmZlcihzdHJpbmcgJGRhdGEpOnZvaWR7CgkJJHRoaXMtPmJpdEJ1ZmZlciA9IG5ldyBCaXRCdWZmZXI7CgoJCSRNQVhfQklUUyA9ICR0aGlzOjpNQVhfQklUU1skdGhpcy0+dmVyc2lvbl1bUVJDb2RlOjpFQ0NfTU9ERVNbJHRoaXMtPm9wdGlvbnMtPmVjY0xldmVsXV07CgoJCSR0aGlzLT5iaXRCdWZmZXIKCQkJLT5wdXQoJHRoaXMtPmRhdGFtb2RlLCA0KQoJCQktPnB1dCgkdGhpcy0+c3RybGVuLCAkdGhpcy0+Z2V0TGVuZ3RoQml0cygpKQoJCTsKCgkJJHRoaXMtPndyaXRlKCRkYXRhKTsKCgkJLy8gb3ZlcmZsb3csIGxpa2VseSBjYXVzZWQgZHVlIHRvIGludmFsaWQgdmVyc2lvbiBzZXR0aW5nCgkJaWYoJHRoaXMtPmJpdEJ1ZmZlci0+Z2V0TGVuZ3RoKCkgPiAkTUFYX0JJVFMpewoJCQl0aHJvdyBuZXcgUVJDb2RlRGF0YUV4Y2VwdGlvbihzcHJpbnRmKCdjb2RlIGxlbmd0aCBvdmVyZmxvdy4gKCVkID4gJWQgYml0KScsICR0aGlzLT5iaXRCdWZmZXItPmdldExlbmd0aCgpLCAkTUFYX0JJVFMpKTsKCQl9CgoJCS8vIGFkZCB0ZXJtaW5hdG9yIChJU08vSUVDIDE4MDA0OjIwMDAgVGFibGUgMikKCQlpZigkdGhpcy0+Yml0QnVmZmVyLT5nZXRMZW5ndGgoKSArIDQgPD0gJE1BWF9CSVRTKXsKCQkJJHRoaXMtPmJpdEJ1ZmZlci0+cHV0KDAsIDQpOwoJCX0KCgkJLy8gcGFkZGluZwoJCXdoaWxlKCR0aGlzLT5iaXRCdWZmZXItPmdldExlbmd0aCgpICUgOCAhPT0gMCl7CgkJCSR0aGlzLT5iaXRCdWZmZXItPnB1dEJpdChmYWxzZSk7CgkJfQoKCQkvLyBwYWRkaW5nCgkJd2hpbGUodHJ1ZSl7CgoJCQlpZigkdGhpcy0+Yml0QnVmZmVyLT5nZXRMZW5ndGgoKSA+PSAkTUFYX0JJVFMpewoJCQkJYnJlYWs7CgkJCX0KCgkJCSR0aGlzLT5iaXRCdWZmZXItPnB1dCgweEVDLCA4KTsKCgkJCWlmKCR0aGlzLT5iaXRCdWZmZXItPmdldExlbmd0aCgpID49ICRNQVhfQklUUyl7CgkJCQlicmVhazsKCQkJfQoKCQkJJHRoaXMtPmJpdEJ1ZmZlci0+cHV0KDB4MTEsIDgpOwoJCX0KCgl9CgoJLyoqCgkgKiBFQ0MgbWFza2luZwoJICoKCSAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguNSBmZgoJICoKCSAqIEBzZWUgaHR0cDovL3d3dy50aG9ua3kuY29tL3FyLWNvZGUtdHV0b3JpYWwvZXJyb3ItY29ycmVjdGlvbi1jb2RpbmcKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIG1hc2tFQ0MoKTphcnJheXsKCQlbJGwxLCAkbDIsICRiMSwgJGIyXSA9ICR0aGlzOjpSU0JMT0NLU1skdGhpcy0+dmVyc2lvbl1bUVJDb2RlOjpFQ0NfTU9ERVNbJHRoaXMtPm9wdGlvbnMtPmVjY0xldmVsXV07CgoJCSRyc0Jsb2NrcyAgICAgPSBhcnJheV9maWxsKDAsICRsMSwgWyRiMSwgJGIyXSk7CgkJJHJzQ291bnQgICAgICA9ICRsMSArICRsMjsKCQkkdGhpcy0+ZWNkYXRhID0gYXJyYXlfZmlsbCgwLCAkcnNDb3VudCwgW10pOwoJCSR0aGlzLT5kY2RhdGEgPSAkdGhpcy0+ZWNkYXRhOwoKCQlpZigkbDIgPiAwKXsKCQkJJHJzQmxvY2tzID0gYXJyYXlfbWVyZ2UoJHJzQmxvY2tzLCBhcnJheV9maWxsKDAsICRsMiwgWyRiMSArIDEsICRiMiArIDFdKSk7CgkJfQoKCQkkdG90YWxDb2RlQ291bnQgPSAwOwoJCSRtYXhEY0NvdW50ICAgICA9IDA7CgkJJG1heEVjQ291bnQgICAgID0gMDsKCQkkb2Zmc2V0ICAgICAgICAgPSAwOwoKCQkkYml0QnVmZmVyID0gJHRoaXMtPmJpdEJ1ZmZlci0+Z2V0QnVmZmVyKCk7CgoJCWZvcmVhY2goJHJzQmxvY2tzIGFzICRrZXkgPT4gJGJsb2NrKXsKCQkJWyRyc0Jsb2NrVG90YWwsICRkY0NvdW50XSA9ICRibG9jazsKCgkJCSRlY0NvdW50ICAgICAgICAgICAgPSAkcnNCbG9ja1RvdGFsIC0gJGRjQ291bnQ7CgkJCSRtYXhEY0NvdW50ICAgICAgICAgPSBtYXgoJG1heERjQ291bnQsICRkY0NvdW50KTsKCQkJJG1heEVjQ291bnQgICAgICAgICA9IG1heCgkbWF4RWNDb3VudCwgJGVjQ291bnQpOwoJCQkkdGhpcy0+ZGNkYXRhWyRrZXldID0gYXJyYXlfZmlsbCgwLCAkZGNDb3VudCwgbnVsbCk7CgoJCQlmb3JlYWNoKCR0aGlzLT5kY2RhdGFbJGtleV0gYXMgJGEgPT4gJF96KXsKCQkJCSR0aGlzLT5kY2RhdGFbJGtleV1bJGFdID0gMHhmZiAmICRiaXRCdWZmZXJbJGEgKyAkb2Zmc2V0XTsKCQkJfQoKCQkJWyRudW0sICRhZGRdID0gJHRoaXMtPnBvbHkoJGtleSwgJGVjQ291bnQpOwoKCQkJZm9yZWFjaCgkdGhpcy0+ZWNkYXRhWyRrZXldIGFzICRjID0+ICRfKXsKCQkJCSRtb2RJbmRleCAgICAgICAgICAgICAgID0gJGMgKyAkYWRkOwoJCQkJJHRoaXMtPmVjZGF0YVska2V5XVskY10gPSAkbW9kSW5kZXggPj0gMCA/ICRudW1bJG1vZEluZGV4XSA6IDA7CgkJCX0KCgkJCSRvZmZzZXQgICAgICAgICArPSAkZGNDb3VudDsKCQkJJHRvdGFsQ29kZUNvdW50ICs9ICRyc0Jsb2NrVG90YWw7CgkJfQoKCQkkZGF0YSAgPSBhcnJheV9maWxsKDAsICR0b3RhbENvZGVDb3VudCwgbnVsbCk7CgkJJGluZGV4ID0gMDsKCgkJJG1hc2sgPSBmdW5jdGlvbihhcnJheSAkYXJyLCBpbnQgJGNvdW50KSB1c2UgKCYkZGF0YSwgJiRpbmRleCwgJHJzQ291bnQpOnZvaWR7CgkJCWZvcigkeCA9IDA7ICR4IDwgJGNvdW50OyAkeCsrKXsKCQkJCWZvcigkeSA9IDA7ICR5IDwgJHJzQ291bnQ7ICR5KyspewoJCQkJCWlmKCR4IDwgY291bnQoJGFyclskeV0pKXsKCQkJCQkJJGRhdGFbJGluZGV4XSA9ICRhcnJbJHldWyR4XTsKCQkJCQkJJGluZGV4Kys7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfTsKCgkJJG1hc2soJHRoaXMtPmRjZGF0YSwgJG1heERjQ291bnQpOwoJCSRtYXNrKCR0aGlzLT5lY2RhdGEsICRtYXhFY0NvdW50KTsKCgkJcmV0dXJuICRkYXRhOwoJfQoKCS8qKgoJICogaGVscGVyIG1ldGhvZCBmb3IgdGhlIHBvbHlub21pYWwgb3BlcmF0aW9ucwoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcG9seShpbnQgJGtleSwgaW50ICRjb3VudCk6YXJyYXl7CgkJJHJzUG9seSAgPSBuZXcgUG9seW5vbWlhbDsKCQkkbW9kUG9seSA9IG5ldyBQb2x5bm9taWFsOwoKCQlmb3IoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKyl7CgkJCSRtb2RQb2x5LT5zZXROdW0oWzEsICRtb2RQb2x5LT5nZXhwKCRpKV0pOwoJCQkkcnNQb2x5LT5tdWx0aXBseSgkbW9kUG9seS0+Z2V0TnVtKCkpOwoJCX0KCgkJJHJzUG9seUNvdW50ID0gY291bnQoJHJzUG9seS0+Z2V0TnVtKCkpOwoKCQkkbW9kUG9seQoJCQktPnNldE51bSgkdGhpcy0+ZGNkYXRhWyRrZXldLCAkcnNQb2x5Q291bnQgLSAxKQoJCQktPm1vZCgkcnNQb2x5LT5nZXROdW0oKSkKCQk7CgoJCSR0aGlzLT5lY2RhdGFbJGtleV0gPSBhcnJheV9maWxsKDAsICRyc1BvbHlDb3VudCAtIDEsIG51bGwpOwoJCSRudW0gICAgICAgICAgICAgICAgPSAkbW9kUG9seS0+Z2V0TnVtKCk7CgoJCXJldHVybiBbCgkJCSRudW0sCgkJCWNvdW50KCRudW0pIC0gY291bnQoJHRoaXMtPmVjZGF0YVska2V5XSksCgkJXTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyMzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGEiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyMzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGEiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJEYXRhIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6Mzg6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0IjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTE6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJRUkRhdGFBYnN0cmFjdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Nzg6IlByb2Nlc3NlcyB0aGUgYmluYXJ5IGRhdGEgYW5kIG1hcHMgaXQgb24gYSBtYXRyaXggd2hpY2ggaXMgdGhlbiBiZWluZyByZXR1cm5lZCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyMjoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6NDp7czo2OiJRUkNvZGUiO3M6MjQ6ImNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZSI7czo5OiJCaXRCdWZmZXIiO3M6MzU6ImNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcQml0QnVmZmVyIjtzOjEwOiJQb2x5bm9taWFsIjtzOjM2OiJjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWwiO3M6MjY6IlNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjtzOjQ2OiJjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjoxO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO047czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MTp7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJRUkRhdGFJbnRlcmZhY2UiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6ODp7czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OiRzdHJsZW4iO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0Ojokc3RybGVuIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6Njoic3RybGVuIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjIxOiJ0aGUgc3RyaW5nIGJ5dGUgY291bnQiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0OiJudWxsIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE51bGxhYmxlIjoxOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE51bGxhYmxlAHJlYWxUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX19czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OiRkYXRhbW9kZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OiRkYXRhbW9kZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6ImRhdGFtb2RlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQ5OiJ0aGUgY3VycmVudCBkYXRhIG1vZGU6IE51bSwgQWxwaGFudW0sIEthbmppLCBCeXRlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0OjokbGVuZ3RoQml0cyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OiRsZW5ndGhCaXRzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6Imxlbmd0aEJpdHMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NjU6Im1vZGUgbGVuZ3RoIGJpdHMgZm9yIHRoZSB2ZXJzaW9uIGJyZWFrcG9pbnRzIDEtOSwgMTAtMjYgYW5kIDI3LTQwIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjcyOiJJU08vSUVDIDE4MDA0OjIwMDAgVGFibGUgMyAtIE51bWJlciBvZiBiaXRzIGluIENoYXJhY3RlciBDb3VudCBJbmRpY2F0b3IiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjk6IlswLCAwLCAwXSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX1zOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6JHZlcnNpb24iO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0OjokdmVyc2lvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6InZlcnNpb24iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjM6ImN1cnJlbnQgUVIgQ29kZSB2ZXJzaW9uIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0OjokZWNkYXRhIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6JGVjZGF0YSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjY6ImVjZGF0YSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxMzoiRUNDIHRlbXAgZGF0YSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtOO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OiRkY2RhdGEiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0OjokZGNkYXRhIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiZGNkYXRhIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjEzOiJFQ0MgdGVtcCBkYXRhIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX1zOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6JG9wdGlvbnMiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0Ojokb3B0aW9ucyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6Im9wdGlvbnMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjA6InRoZSBvcHRpb25zIGluc3RhbmNlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxTZXR0aW5nc1xTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI2OiJTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZSI7fX1pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiUVJPcHRpb25zIjt9fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtOO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjY6IlNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjt9fX1zOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6JGJpdEJ1ZmZlciI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OiRiaXRCdWZmZXIiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJiaXRCdWZmZXIiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjA6ImEgQml0QnVmZmVyIGluc3RhbmNlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NjU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjY4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNjoiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcQml0QnVmZmVyIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiQml0QnVmZmVyIjt9fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6MTA6e3M6NTM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0OjpfX2NvbnN0cnVjdCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoyODoiUVJEYXRhSW50ZXJmYWNlIGNvbnN0cnVjdG9yLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjcwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6X19jb25zdHJ1Y3QoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJfX2NvbnN0cnVjdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJvcHRpb25zIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjY6IlNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImRhdGEiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7czo0OiJudWxsIjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e319czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OnNldERhdGEoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXREb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjgxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6c2V0RGF0YSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6Nzoic2V0RGF0YSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJkYXRhIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjg0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJRUkRhdGFJbnRlcmZhY2UiO319fXM6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0Ojppbml0TWF0cml4KCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0Ojppbml0TWF0cml4KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoiaW5pdE1hdHJpeCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czoxMToibWFza1BhdHRlcm4iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoidGVzdCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtzOjQ6Im51bGwiO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJRUk1hdHJpeCI7fX19czo1NToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OmdldExlbmd0aEJpdHMoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NzI6InJldHVybnMgdGhlIGxlbmd0aCBiaXRzIGZvciB0aGUgdmVyc2lvbiBicmVha3BvaW50cyAxLTksIDEwLTI2IGFuZCAyNy00MCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVGhyb3dzIjozOntzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJDb2RlRGF0YUV4Y2VwdGlvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE5OiJRUkNvZGVEYXRhRXhjZXB0aW9uIjt9fXM6NzoiACoAbmFtZSI7czo2OiJ0aHJvd3MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTg6ImNvZGVDb3ZlcmFnZUlnbm9yZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTEwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU1OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6Z2V0TGVuZ3RoQml0cygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6ImdldExlbmd0aEJpdHMiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTE2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUxOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6Z2V0TGVuZ3RoKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQyOiJyZXR1cm5zIHRoZSBieXRlIGNvdW50IG9mIHRoZSAkZGF0YSBzdHJpbmciO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMjc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0OjpnZXRMZW5ndGgoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6ImdldExlbmd0aCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJkYXRhIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEzMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1OToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OmdldE1pbmltdW1WZXJzaW9uKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjU1OiJyZXR1cm5zIHRoZSBtaW5pbXVtIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgZ2l2ZW4gc3RyaW5nIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xUaHJvd3MiOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkNvZGVEYXRhRXhjZXB0aW9uIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTk6IlFSQ29kZURhdGFFeGNlcHRpb24iO319czo3OiIAKgBuYW1lIjtzOjY6InRocm93cyI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMzQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0OjpnZXRNaW5pbXVtVmVyc2lvbigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTc6ImdldE1pbmltdW1WZXJzaW9uIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEzOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OndyaXRlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQ2OiJ3cml0ZXMgdGhlIGFjdHVhbCBkYXRhIHN0cmluZyB0byB0aGUgQml0QnVmZmVyIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjU0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4iOjE6e3M6NjE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1NjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OndyaXRlQml0QnVmZmVyKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNDoid3JpdGVCaXRCdWZmZXIiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTU3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6d3JpdGUoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6IndyaXRlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjE7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImRhdGEiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTYyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo1NjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6OndyaXRlQml0QnVmZmVyKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjUyOiJjcmVhdGVzIGEgQml0QnVmZmVyIGFuZCB3cml0ZXMgdGhlIHN0cmluZyBkYXRhIHRvIGl0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xUaHJvd3MiOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM0OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlRXhjZXB0aW9uIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6IlFSQ29kZUV4Y2VwdGlvbiI7fX1zOjc6IgAqAG5hbWUiO3M6NjoidGhyb3dzIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxNjoib24gZGF0YSBvdmVyZmxvdyI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTY0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU2OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6d3JpdGVCaXRCdWZmZXIoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJ3cml0ZUJpdEJ1ZmZlciI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJkYXRhIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE2OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0OjptYXNrRUNDKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjExOiJFQ0MgbWFza2luZyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozMzoiSVNPL0lFQyAxODAwNDoyMDAwIFNlY3Rpb24gOC41IGZmIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwiOjE6e3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsAHVyaSI7czo2MjoiaHR0cDovL3d3dy50aG9ua3kuY29tL3FyLWNvZGUtdHV0b3JpYWwvZXJyb3ItY29ycmVjdGlvbi1jb2RpbmciO31zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMTQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0OjptYXNrRUNDKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJtYXNrRUNDIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIyMTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fXM6NDY6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0Ojpwb2x5KCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQzOiJoZWxwZXIgbWV0aG9kIGZvciB0aGUgcG9seW5vbWlhbCBvcGVyYXRpb25zIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjgzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdDo6cG9seSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoicG9seSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czozOiJrZXkiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NToiY291bnQiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjg2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9fQ==";
\ No newline at end of file
diff --git a/files/+/W/gTGCTZSFt0eFPkK5R3dA b/files/+/W/gTGCTZSFt0eFPkK5R3dA
deleted file mode 100644
index d3a5bb79f..000000000
--- a/files/+/W/gTGCTZSFt0eFPkK5R3dA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Af6854c7cef3b34bb696e660ac106b5aa-44100e6ee21715727ebeabc60113e93a
-s:48524:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTY6IkNsYXNzIFFSQ29kZVRlc3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTQ6IlFSQ29kZVRlc3QucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMTcuMTEuMjAxNyI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjE6ImNoaWxsZXJsYW5cUVJDb2RlVGVzdCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNyBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiNDQxMDBlNmVlMjE3MTU3MjdlYmVhYmM2MDExM2U5M2EiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxNDoiUVJDb2RlVGVzdC5waHAiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czoyMDoidGVzdHMvUVJDb2RlVGVzdC5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjQ2MDc6Ijw/cGhwCi8qKgogKiBDbGFzcyBRUkNvZGVUZXN0CiAqCiAqIEBmaWxlc291cmNlICAgUVJDb2RlVGVzdC5waHAKICogQGNyZWF0ZWQgICAgICAxNy4xMS4yMDE3CiAqIEBwYWNrYWdlICAgICAgY2hpbGxlcmxhblxRUkNvZGVUZXN0CiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0OwoKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXHtRUk9wdGlvbnMsIFFSQ29kZX07CnVzZSBjaGlsbGVybGFuXFFSQ29kZVxEYXRhXHtBbHBoYU51bSwgQnl0ZSwgS2FuamksIE51bWJlciwgUVJDb2RlRGF0YUV4Y2VwdGlvbn07CnVzZSBjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJDb2RlT3V0cHV0RXhjZXB0aW9uOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7Cgp1c2UgZnVuY3Rpb24gcmFuZG9tX2J5dGVzOwoKLyoqCiAqIFRlc3RzIGJhc2ljIGZ1bmN0aW9ucyBvZiB0aGUgUVJDb2RlIGNsYXNzCiAqLwpjbGFzcyBRUkNvZGVUZXN0IGV4dGVuZHMgVGVzdENhc2V7CgoJLyoqIEBpbnRlcm5hbCAgKi8KCXByb3RlY3RlZCBRUkNvZGUgJHFyY29kZTsKCS8qKiBAaW50ZXJuYWwgICovCglwcm90ZWN0ZWQgUVJPcHRpb25zICRvcHRpb25zOwoKCS8qKgoJICogaW52b2tlIHRlc3QgaW5zdGFuY2VzCgkgKgoJICogQGludGVybmFsCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRVcCgpOnZvaWR7CgkJJHRoaXMtPnFyY29kZSAgPSBuZXcgUVJDb2RlOwoJCSR0aGlzLT5vcHRpb25zID0gbmV3IFFST3B0aW9uczsKCX0KCgkvKioKCSAqIGlzTnVtYmVyKCkgc2hvdWxkIHBhc3Mgb24gYW55IG51bWJlciBhbmQgZmFpbCBvbiBhbnl0aGluZyBlbHNlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0SXNOdW1iZXIoKTp2b2lkewoJCSR0aGlzOjphc3NlcnRUcnVlKCR0aGlzLT5xcmNvZGUtPmlzTnVtYmVyKCcwMTIzNDU2Nzg5JykpOwoKCQkkdGhpczo6YXNzZXJ0RmFsc2UoJHRoaXMtPnFyY29kZS0+aXNOdW1iZXIoJ0FCQzEyMycpKTsKCX0KCgkvKioKCSAqIGlzQWxwaGFOdW0oKSBzaG91bGQgcGFzcyBvbiB0aGUgNDUgZGVmaW5lZCBjaGFyYWN0ZXJzIGFuZCBmYWlsIG9uIGFueXRoaW5nIGVsc2UgKGUuZy4gbG93ZXJjYXNlKQoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdElzQWxwaGFOdW0oKTp2b2lkewoJCSR0aGlzOjphc3NlcnRUcnVlKCR0aGlzLT5xcmNvZGUtPmlzQWxwaGFOdW0oJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMTIzNDU2Nzg5MCAkJSorLS4vOicpKTsKCgkJJHRoaXM6OmFzc2VydEZhbHNlKCR0aGlzLT5xcmNvZGUtPmlzQWxwaGFOdW0oJ2FiYycpKTsKCX0KCgkvKioKCSAqIGlzS2FuamkoKSBzaG91bGQgcGFzcyBvbiBLYW5qaS9TSklTIGNoYXJhY3RlcnMgYW5kIGZhaWwgb24gZXZlcnl0aGluZyBlbHNlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0SXNLYW5qaSgpOnZvaWR7CgkJJHRoaXM6OmFzc2VydFRydWUoJHRoaXMtPnFyY29kZS0+aXNLYW5qaSgn6IyX6I23JykpOwoKCQkkdGhpczo6YXNzZXJ0RmFsc2UoJHRoaXMtPnFyY29kZS0+aXNLYW5qaSgnw4MnKSk7CgkJJHRoaXM6OmFzc2VydEZhbHNlKCR0aGlzLT5xcmNvZGUtPmlzS2FuamkoJ0FCQycpKTsKCQkkdGhpczo6YXNzZXJ0RmFsc2UoJHRoaXMtPnFyY29kZS0+aXNLYW5qaSgnMTIzJykpOwoJfQoKCS8qKgoJICogaXNCeXRlKCkgcGFzc3NlcyBhbnkgYmluYXJ5IHN0cmluZyBhbmQgb25seSBmYWlscyBvbiBlbXB0eSBzdHJpbmdzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0SXNCeXRlKCk6dm9pZHsKCQkkdGhpczo6YXNzZXJ0VHJ1ZSgkdGhpcy0+cXJjb2RlLT5pc0J5dGUoIlx4MDFceDAyXHgwMyIpKTsKCQkkdGhpczo6YXNzZXJ0VHJ1ZSgkdGhpcy0+cXJjb2RlLT5pc0J5dGUoJyAgICAgICAgICAgICcpKTsgLy8gbm90IGVtcHR5IQoKCQkkdGhpczo6YXNzZXJ0RmFsc2UoJHRoaXMtPnFyY29kZS0+aXNCeXRlKCcnKSk7Cgl9CgoJLyoqCgkgKiB0ZXN0cyBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gYW4gaW52YWxpZCAoYnVpbHQtaW4pIG91dHB1dCB0eXBlIGlzIHNwZWNpZmllZAoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdEluaXREYXRhSW50ZXJmYWNlRXhjZXB0aW9uKCk6dm9pZHsKCQkkdGhpcy0+ZXhwZWN0RXhjZXB0aW9uKFFSQ29kZU91dHB1dEV4Y2VwdGlvbjo6Y2xhc3MpOwoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb25NZXNzYWdlKCdpbnZhbGlkIG91dHB1dCB0eXBlJyk7CgoJCSR0aGlzLT5vcHRpb25zLT5vdXRwdXRUeXBlID0gJ2Zvbyc7CgoJCShuZXcgUVJDb2RlKCR0aGlzLT5vcHRpb25zKSktPnJlbmRlcigndGVzdCcpOwoJfQoKCS8qKgoJICogdGVzdHMgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIHRyeWluZyB0byBjYWxsIGdldE1hdHJpeCgpIHdpdGhvdXQgZGF0YSAoZW1wdHkgc3RyaW5nLCBubyBkYXRhIHNldCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRNYXRyaXhFeGNlcHRpb24oKTp2b2lkewoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb24oUVJDb2RlRGF0YUV4Y2VwdGlvbjo6Y2xhc3MpOwoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb25NZXNzYWdlKCdRUkNvZGU6OmdldE1hdHJpeCgpIE5vIGRhdGEgZ2l2ZW4uJyk7CgoJCSR0aGlzLT5xcmNvZGUtPmdldE1hdHJpeCgnJyk7Cgl9CgoJLyoqCgkgKiB0ZXN0IHdoZXRoZXIgc3RpbmdzIGFyZSB0cmltbWVkICh0aGV5IGFyZSBub3QpIC0gaSdtIHN0aWxsIHRvcm4gb24gdGhhdCAoc2VlIGlzQnl0ZSkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RBdm9pZFRyaW1taW5nKCk6dm9pZHsKCQkkbTEgPSAkdGhpcy0+cXJjb2RlLT5nZXRNYXRyaXgoJ2hlbGxvJyktPm1hdHJpeCgpOwoJCSRtMiA9ICR0aGlzLT5xcmNvZGUtPmdldE1hdHJpeCgnaGVsbG8gJyktPm1hdHJpeCgpOyAvLyBhZGRlZCBzcGFjZQoKCQkkdGhpczo6YXNzZXJ0Tm90U2FtZSgkbTEsICRtMik7Cgl9CgoJLyoqCgkgKiB0ZXN0cyBpZiB0aGUgZGF0YSBtb2RlIGlzIG92ZXJyaWRlbiBpZiBRUk9wdGlvbnM6OiRkYXRhTW9kZU92ZXJyaWRlIGlzIHNldCB0byBhIHZhbGlkIHZhbHVlCgkgKgoJICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hpbGxlcmxhbi9waHAtcXJjb2RlL2lzc3Vlcy8zOQoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdERhdGFNb2RlT3ZlcnJpZGUoKTp2b2lkewoKCQkvLyBubyAob3IgaW52YWxpZCkgdmFsdWUgc2V0IC0gYXV0byBkZXRlY3Rpb24KCQkkdGhpcy0+b3B0aW9ucy0+ZGF0YU1vZGVPdmVycmlkZSA9ICdmb28nOwoJCSR0aGlzLT5xcmNvZGUgPSBuZXcgUVJDb2RlOwoKCQkkdGhpczo6YXNzZXJ0SW5zdGFuY2VPZihOdW1iZXI6OmNsYXNzLCAkdGhpcy0+cXJjb2RlLT5pbml0RGF0YUludGVyZmFjZSgnMTIzJykpOwoJCSR0aGlzOjphc3NlcnRJbnN0YW5jZU9mKEFscGhhTnVtOjpjbGFzcywgJHRoaXMtPnFyY29kZS0+aW5pdERhdGFJbnRlcmZhY2UoJ0FCQzEyMycpKTsKCQkkdGhpczo6YXNzZXJ0SW5zdGFuY2VPZihCeXRlOjpjbGFzcywgJHRoaXMtPnFyY29kZS0+aW5pdERhdGFJbnRlcmZhY2UocmFuZG9tX2J5dGVzKDMyKSkpOwoJCSR0aGlzOjphc3NlcnRJbnN0YW5jZU9mKEthbmppOjpjbGFzcywgJHRoaXMtPnFyY29kZS0+aW5pdERhdGFJbnRlcmZhY2UoJ+iMl+iNtycpKTsKCgkJLy8gZGF0YSBtb2RlIHNldDogZm9yY2UgdGhlIGdpdmVuIGRhdGEgbW9kZQoJCSR0aGlzLT5vcHRpb25zLT5kYXRhTW9kZU92ZXJyaWRlID0gJ0J5dGUnOwoJCSR0aGlzLT5xcmNvZGUgPSBuZXcgUVJDb2RlKCR0aGlzLT5vcHRpb25zKTsKCgkJJHRoaXM6OmFzc2VydEluc3RhbmNlT2YoQnl0ZTo6Y2xhc3MsICR0aGlzLT5xcmNvZGUtPmluaXREYXRhSW50ZXJmYWNlKCcxMjMnKSk7CgkJJHRoaXM6OmFzc2VydEluc3RhbmNlT2YoQnl0ZTo6Y2xhc3MsICR0aGlzLT5xcmNvZGUtPmluaXREYXRhSW50ZXJmYWNlKCdBQkMxMjMnKSk7CgkJJHRoaXM6OmFzc2VydEluc3RhbmNlT2YoQnl0ZTo6Y2xhc3MsICR0aGlzLT5xcmNvZGUtPmluaXREYXRhSW50ZXJmYWNlKHJhbmRvbV9ieXRlcygzMikpKTsKCQkkdGhpczo6YXNzZXJ0SW5zdGFuY2VPZihCeXRlOjpjbGFzcywgJHRoaXMtPnFyY29kZS0+aW5pdERhdGFJbnRlcmZhY2UoJ+iMl+iNtycpKTsKCX0KCgkvKioKCSAqIHRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhbiBpbnZhbGlkIGNoYXJhY3RlciBvY2N1cnMgd2hlbiBmb3JjaW5nIGEgZGF0YSBtb2RlIG90aGVyIHRoYW4gQnl0ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdERhdGFNb2RlT3ZlcnJpZGVFcnJvcigpOnZvaWR7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbihRUkNvZGVEYXRhRXhjZXB0aW9uOjpjbGFzcyk7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbk1lc3NhZ2UoJ2lsbGVnYWwgY2hhcjonKTsKCgkJJHRoaXMtPm9wdGlvbnMtPmRhdGFNb2RlT3ZlcnJpZGUgPSAnQWxwaGFOdW0nOwoKCQkobmV3IFFSQ29kZSgkdGhpcy0+b3B0aW9ucykpLT5pbml0RGF0YUludGVyZmFjZShyYW5kb21fYnl0ZXMoMzIpKTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyMjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjIyOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6IlFSQ29kZVRlc3QiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czozMzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUkNvZGVUZXN0IjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTE6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMzOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFSQ29kZVRlc3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoiUVJDb2RlVGVzdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NDE6IlRlc3RzIGJhc2ljIGZ1bmN0aW9ucyBvZiB0aGUgUVJDb2RlIGNsYXNzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjIxOiJjaGlsbGVybGFuXFFSQ29kZVRlc3QiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjk6e3M6OToiUVJPcHRpb25zIjtzOjI3OiJjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO3M6ODoiQWxwaGFOdW0iO3M6MzE6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcQWxwaGFOdW0iO3M6NDoiQnl0ZSI7czoyNzoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxCeXRlIjtzOjU6IkthbmppIjtzOjI4OiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEthbmppIjtzOjY6Ik51bWJlciI7czoyOToiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxOdW1iZXIiO3M6MTk6IlFSQ29kZURhdGFFeGNlcHRpb24iO3M6NDI6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJDb2RlRGF0YUV4Y2VwdGlvbiI7czoyMToiUVJDb2RlT3V0cHV0RXhjZXB0aW9uIjtzOjQ2OiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJDb2RlT3V0cHV0RXhjZXB0aW9uIjtzOjg6IlRlc3RDYXNlIjtzOjI2OiJQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZSI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcGFyZW50IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjc6IlxQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6IlRlc3RDYXNlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjI6e3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJDb2RlVGVzdDo6JHFyY29kZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUkNvZGVUZXN0OjokcXJjb2RlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoicXJjb2RlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI1OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiUVJDb2RlIjt9fX1zOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFSQ29kZVRlc3Q6OiRvcHRpb25zIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFSQ29kZVRlc3Q6OiRvcHRpb25zIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6Nzoib3B0aW9ucyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyODoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6IlFST3B0aW9ucyI7fX19fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjEwOntzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFSQ29kZVRlc3Q6OnNldFVwKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjIxOiJpbnZva2UgdGVzdCBpbnN0YW5jZXMiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJDb2RlVGVzdDo6c2V0VXAoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6InNldFVwIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUkNvZGVUZXN0Ojp0ZXN0SXNOdW1iZXIoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NjI6ImlzTnVtYmVyKCkgc2hvdWxkIHBhc3Mgb24gYW55IG51bWJlciBhbmQgZmFpbCBvbiBhbnl0aGluZyBlbHNlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJDb2RlVGVzdDo6dGVzdElzTnVtYmVyKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMjoidGVzdElzTnVtYmVyIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo1MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUkNvZGVUZXN0Ojp0ZXN0SXNBbHBoYU51bSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo5NjoiaXNBbHBoYU51bSgpIHNob3VsZCBwYXNzIG9uIHRoZSA0NSBkZWZpbmVkIGNoYXJhY3RlcnMgYW5kIGZhaWwgb24gYW55dGhpbmcgZWxzZSAoZS5nLiBsb3dlcmNhc2UpIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJDb2RlVGVzdDo6dGVzdElzQWxwaGFOdW0oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJ0ZXN0SXNBbHBoYU51bSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJDb2RlVGVzdDo6dGVzdElzS2FuamkoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NzQ6ImlzS2FuamkoKSBzaG91bGQgcGFzcyBvbiBLYW5qaS9TSklTIGNoYXJhY3RlcnMgYW5kIGZhaWwgb24gZXZlcnl0aGluZyBlbHNlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJDb2RlVGVzdDo6dGVzdElzS2FuamkoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJ0ZXN0SXNLYW5qaSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJDb2RlVGVzdDo6dGVzdElzQnl0ZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo2NjoiaXNCeXRlKCkgcGFzc3NlcyBhbnkgYmluYXJ5IHN0cmluZyBhbmQgb25seSBmYWlscyBvbiBlbXB0eSBzdHJpbmdzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJDb2RlVGVzdDo6dGVzdElzQnl0ZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6InRlc3RJc0J5dGUiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjY3OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFSQ29kZVRlc3Q6OnRlc3RJbml0RGF0YUludGVyZmFjZUV4Y2VwdGlvbigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo4MzoidGVzdHMgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIGFuIGludmFsaWQgKGJ1aWx0LWluKSBvdXRwdXQgdHlwZSBpcyBzcGVjaWZpZWQiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo4MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2NzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUkNvZGVUZXN0Ojp0ZXN0SW5pdERhdGFJbnRlcmZhY2VFeGNlcHRpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjMwOiJ0ZXN0SW5pdERhdGFJbnRlcmZhY2VFeGNlcHRpb24iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6ODQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjU5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFSQ29kZVRlc3Q6OnRlc3RHZXRNYXRyaXhFeGNlcHRpb24oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTA0OiJ0ZXN0cyBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGNhbGwgZ2V0TWF0cml4KCkgd2l0aG91dCBkYXRhIChlbXB0eSBzdHJpbmcsIG5vIGRhdGEgc2V0KSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjkzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFSQ29kZVRlc3Q6OnRlc3RHZXRNYXRyaXhFeGNlcHRpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIyOiJ0ZXN0R2V0TWF0cml4RXhjZXB0aW9uIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjk2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo1NDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUkNvZGVUZXN0Ojp0ZXN0QXZvaWRUcmltbWluZygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo4NDoidGVzdCB3aGV0aGVyIHN0aW5ncyBhcmUgdHJpbW1lZCAodGhleSBhcmUgbm90KSAtIGknbSBzdGlsbCB0b3JuIG9uIHRoYXQgKHNlZSBpc0J5dGUpIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTAzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU0OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFSQ29kZVRlc3Q6OnRlc3RBdm9pZFRyaW1taW5nKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoidGVzdEF2b2lkVHJpbW1pbmciO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTA2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo1NzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUkNvZGVUZXN0Ojp0ZXN0RGF0YU1vZGVPdmVycmlkZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo5MToidGVzdHMgaWYgdGhlIGRhdGEgbW9kZSBpcyBvdmVycmlkZW4gaWYgUVJPcHRpb25zOjokZGF0YU1vZGVPdmVycmlkZSBpcyBzZXQgdG8gYSB2YWxpZCB2YWx1ZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybCI6MTp7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwAdXJpIjtzOjUwOiJodHRwczovL2dpdGh1Yi5jb20vY2hpbGxlcmxhbi9waHAtcXJjb2RlL2lzc3Vlcy8zOSI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1NzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUkNvZGVUZXN0Ojp0ZXN0RGF0YU1vZGVPdmVycmlkZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjA6InRlc3REYXRhTW9kZU92ZXJyaWRlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NjI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJDb2RlVGVzdDo6dGVzdERhdGFNb2RlT3ZlcnJpZGVFcnJvcigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxMDU6InRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhbiBpbnZhbGlkIGNoYXJhY3RlciBvY2N1cnMgd2hlbiBmb3JjaW5nIGEgZGF0YSBtb2RlIG90aGVyIHRoYW4gQnl0ZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEzOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2MjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUkNvZGVUZXN0Ojp0ZXN0RGF0YU1vZGVPdmVycmlkZUVycm9yKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNToidGVzdERhdGFNb2RlT3ZlcnJpZGVFcnJvciI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNDI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/+/Z/dzr5Dxi9S+blrEGs-chQ b/files/+/Z/dzr5Dxi9S+blrEGs-chQ
deleted file mode 100644
index 0d5d8b8ac..000000000
--- a/files/+/Z/dzr5Dxi9S+blrEGs-chQ
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A2e3323021f002ba34a9011727eff8f7b-bb2e392aaba51e40fa3ed9ff06f13993
-s:21176:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTk6IkNsYXNzIEJpdEJ1ZmZlclRlc3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTc6IkJpdEJ1ZmZlclRlc3QucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMDguMDIuMjAxNiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6Mjk6ImNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjY6IlNtaWxleSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoyMToic21pbGV5QGNoaWxsZXJsYW4ubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiIyMDE1IFNtaWxleSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzoiTUlUIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiJiYjJlMzkyYWFiYTUxZTQwZmEzZWQ5ZmYwNmYxMzk5MyI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjE3OiJCaXRCdWZmZXJUZXN0LnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjMxOiJ0ZXN0cy9IZWxwZXJzL0JpdEJ1ZmZlclRlc3QucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czoxMjQ5OiI8P3BocAovKioKICogQ2xhc3MgQml0QnVmZmVyVGVzdAogKgogKiBAZmlsZXNvdXJjZSAgIEJpdEJ1ZmZlclRlc3QucGhwCiAqIEBjcmVhdGVkICAgICAgMDguMDIuMjAxNgogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzCiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNSBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnM7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOwp1c2UgY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xCaXRCdWZmZXI7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBCaXRCdWZmZXIgY292ZXJhZ2UgdGVzdAogKi8KZmluYWwgY2xhc3MgQml0QnVmZmVyVGVzdCBleHRlbmRzIFRlc3RDYXNlewoKCXByb3RlY3RlZCBCaXRCdWZmZXIgJGJpdEJ1ZmZlcjsKCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0VXAoKTp2b2lkewoJCSR0aGlzLT5iaXRCdWZmZXIgPSBuZXcgQml0QnVmZmVyOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBiaXRQcm92aWRlcigpOmFycmF5ewoJCXJldHVybiBbCgkJCSdudW1iZXInICAgPT4gW1FSQ29kZTo6REFUQV9OVU1CRVIsIDE2XSwKCQkJJ2FscGhhbnVtJyA9PiBbUVJDb2RlOjpEQVRBX0FMUEhBTlVNLCAzMl0sCgkJCSdieXRlJyAgICAgPT4gW1FSQ29kZTo6REFUQV9CWVRFLCA2NF0sCgkJCSdrYW5qaScgICAgPT4gW1FSQ29kZTo6REFUQV9LQU5KSSwgMTI4XSwKCQldOwoJfQoKCS8qKgoJICogQGRhdGFQcm92aWRlciBiaXRQcm92aWRlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdFB1dChpbnQgJGRhdGEsIGludCAkdmFsdWUpOnZvaWR7CgkJJHRoaXMtPmJpdEJ1ZmZlci0+cHV0KCRkYXRhLCA0KTsKCQkkdGhpczo6YXNzZXJ0U2FtZSgkdmFsdWUsICR0aGlzLT5iaXRCdWZmZXItPmdldEJ1ZmZlcigpWzBdKTsKCQkkdGhpczo6YXNzZXJ0U2FtZSg0LCAkdGhpcy0+Yml0QnVmZmVyLT5nZXRMZW5ndGgoKSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHRlc3RDbGVhcigpOnZvaWR7CgkJJHRoaXMtPmJpdEJ1ZmZlci0+Y2xlYXIoKTsKCQkkdGhpczo6YXNzZXJ0U2FtZShbXSwgJHRoaXMtPmJpdEJ1ZmZlci0+Z2V0QnVmZmVyKCkpOwoJCSR0aGlzOjphc3NlcnRTYW1lKDAsICR0aGlzLT5iaXRCdWZmZXItPmdldExlbmd0aCgpKTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czozMDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzA6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcSGVscGVycyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6IkhlbHBlcnMiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czo0NDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzXEJpdEJ1ZmZlclRlc3QiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDQ6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcSGVscGVyc1xCaXRCdWZmZXJUZXN0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6IkJpdEJ1ZmZlclRlc3QiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjIzOiJCaXRCdWZmZXIgY292ZXJhZ2UgdGVzdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyOToiY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnMiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjM6e3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO3M6OToiQml0QnVmZmVyIjtzOjM1OiJjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXEJpdEJ1ZmZlciI7czo4OiJUZXN0Q2FzZSI7czoyNjoiUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2UiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjE7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJUZXN0Q2FzZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YToxOntzOjU2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnNcQml0QnVmZmVyVGVzdDo6JGJpdEJ1ZmZlciI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1NjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzXEJpdEJ1ZmZlclRlc3Q6OiRiaXRCdWZmZXIiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJiaXRCdWZmZXIiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TjtzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM2OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xCaXRCdWZmZXIiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJCaXRCdWZmZXIiO319fX1zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0aG9kcyI7YTo0OntzOjUzOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnNcQml0QnVmZmVyVGVzdDo6c2V0VXAoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TjtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzXEJpdEJ1ZmZlclRlc3Q6OnNldFVwKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJzZXRVcCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NTk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcSGVscGVyc1xCaXRCdWZmZXJUZXN0OjpiaXRQcm92aWRlcigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtOO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnNcQml0QnVmZmVyVGVzdDo6Yml0UHJvdmlkZXIoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJiaXRQcm92aWRlciI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fXM6NTU6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcSGVscGVyc1xCaXRCdWZmZXJUZXN0Ojp0ZXN0UHV0KCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEyOiJkYXRhUHJvdmlkZXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiJiaXRQcm92aWRlciI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mzk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTU6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcSGVscGVyc1xCaXRCdWZmZXJUZXN0Ojp0ZXN0UHV0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJ0ZXN0UHV0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImRhdGEiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NToidmFsdWUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjU3OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnNcQml0QnVmZmVyVGVzdDo6dGVzdENsZWFyKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO047czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcSGVscGVyc1xCaXRCdWZmZXJUZXN0Ojp0ZXN0Q2xlYXIoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6InRlc3RDbGVhciI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0ODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/0/C/dkWSbCSGgTuEDOB6H7wA b/files/0/C/dkWSbCSGgTuEDOB6H7wA
deleted file mode 100644
index 04b7204d5..000000000
--- a/files/0/C/dkWSbCSGgTuEDOB6H7wA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A9e8b63b8c6df7e879ebac500607b3c00-1f68e98a6cae9a4079f05013452cb932
-s:24044:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTg6IkNsYXNzIFFSU3RyaW5nVGVzdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxNjoiUVJTdHJpbmdUZXN0LnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjI0LjEyLjIwMTciO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI4OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjY6IlNtaWxleSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoyMToic21pbGV5QGNoaWxsZXJsYW4ubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiIyMDE3IFNtaWxleSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzoiTUlUIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiIxZjY4ZTk4YTZjYWU5YTQwNzlmMDUwMTM0NTJjYjkzMiI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjE2OiJRUlN0cmluZ1Rlc3QucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6Mjk6InRlc3RzL091dHB1dC9RUlN0cmluZ1Rlc3QucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czoxNzE1OiI8P3BocAovKioKICogQ2xhc3MgUVJTdHJpbmdUZXN0CiAqCiAqIEBmaWxlc291cmNlICAgUVJTdHJpbmdUZXN0LnBocAogKiBAY3JlYXRlZCAgICAgIDI0LjEyLjIwMTcKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0CiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dDsKCnVzZSBjaGlsbGVybGFuXFFSQ29kZUV4YW1wbGVzXE15Q3VzdG9tT3V0cHV0Owp1c2UgY2hpbGxlcmxhblxRUkNvZGVce1FSQ29kZSwgUVJPcHRpb25zfTsKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFx7UVJPdXRwdXRJbnRlcmZhY2UsIFFSU3RyaW5nfTsKCi8qKgogKiBUZXN0cyB0aGUgUVJTdHJpbmcgb3V0cHV0IG1vZHVsZQogKi8KY2xhc3MgUVJTdHJpbmdUZXN0IGV4dGVuZHMgUVJPdXRwdXRUZXN0QWJzdHJhY3R7CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICogQGludGVybmFsCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRPdXRwdXRJbnRlcmZhY2UoUVJPcHRpb25zICRvcHRpb25zKTpRUk91dHB1dEludGVyZmFjZXsKCQlyZXR1cm4gbmV3IFFSU3RyaW5nKCRvcHRpb25zLCAkdGhpcy0+bWF0cml4KTsKCX0KCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHR5cGVzKCk6YXJyYXl7CgkJcmV0dXJuIFsKCQkJJ2pzb24nID0+IFtRUkNvZGU6Ok9VVFBVVF9TVFJJTkdfSlNPTl0sCgkJCSd0ZXh0JyA9PiBbUVJDb2RlOjpPVVRQVVRfU1RSSU5HX1RFWFRdLAoJCV07Cgl9CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdFNldE1vZHVsZVZhbHVlcygpOnZvaWR7CgoJCSR0aGlzLT5vcHRpb25zLT5tb2R1bGVWYWx1ZXMgPSBbCgkJCS8vIGRhdGEKCQkJMTAyNCA9PiAnQScsCgkJCTQgICAgPT4gJ0InLAoJCV07CgoJCSR0aGlzLT5vdXRwdXRJbnRlcmZhY2UgPSAkdGhpcy0+Z2V0T3V0cHV0SW50ZXJmYWNlKCR0aGlzLT5vcHRpb25zKTsKCQkkZGF0YSAgICAgICAgICAgICAgICAgID0gJHRoaXMtPm91dHB1dEludGVyZmFjZS0+ZHVtcCgpOwoKCQkkdGhpczo6YXNzZXJ0U3RyaW5nQ29udGFpbnNTdHJpbmcoJ0EnLCAkZGF0YSk7CgkJJHRoaXM6OmFzc2VydFN0cmluZ0NvbnRhaW5zU3RyaW5nKCdCJywgJGRhdGEpOwoJfQoKCS8qKgoJICogY292ZXJzIHRoZSBjdXN0b20gb3V0cHV0IGZ1bmN0aW9uYWxpdHkgdmlhIGFuIGV4YW1wbGUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RDdXN0b21PdXRwdXQoKTp2b2lkewoJCSR0aGlzLT5vcHRpb25zLT52ZXJzaW9uICAgICAgICAgPSA1OwoJCSR0aGlzLT5vcHRpb25zLT5lY2NMZXZlbCAgICAgICAgPSBRUkNvZGU6OkVDQ19MOwoJCSR0aGlzLT5vcHRpb25zLT5vdXRwdXRUeXBlICAgICAgPSBRUkNvZGU6Ok9VVFBVVF9DVVNUT007CgkJJHRoaXMtPm9wdGlvbnMtPm91dHB1dEludGVyZmFjZSA9IE15Q3VzdG9tT3V0cHV0OjpjbGFzczsKCgkJJHRoaXM6OmFzc2VydFNhbWUoCgkJCWZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy9zYW1wbGVzL2N1c3RvbScpLAoJCQkobmV3IFFSQ29kZSgkdGhpcy0+b3B0aW9ucykpLT5yZW5kZXIoJ3Rlc3QnKQoJCSk7Cgl9Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6Mjk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiT3V0cHV0Ijt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSU3RyaW5nVGVzdCI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJTdHJpbmdUZXN0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTI6IlFSU3RyaW5nVGVzdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzI6IlRlc3RzIHRoZSBRUlN0cmluZyBvdXRwdXQgbW9kdWxlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjI4OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTo1OntzOjE0OiJNeUN1c3RvbU91dHB1dCI7czo0MDoiY2hpbGxlcmxhblxRUkNvZGVFeGFtcGxlc1xNeUN1c3RvbU91dHB1dCI7czo2OiJRUkNvZGUiO3M6MjQ6ImNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZSI7czo5OiJRUk9wdGlvbnMiO3M6Mjc6ImNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7czoxNzoiUVJPdXRwdXRJbnRlcmZhY2UiO3M6NDI6ImNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEludGVyZmFjZSI7czo4OiJRUlN0cmluZyI7czozMzoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSU3RyaW5nIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJPdXRwdXRUZXN0QWJzdHJhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMDoiUVJPdXRwdXRUZXN0QWJzdHJhY3QiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjQ6e3M6NjQ6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSU3RyaW5nVGVzdDo6Z2V0T3V0cHV0SW50ZXJmYWNlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjQ6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSU3RyaW5nVGVzdDo6Z2V0T3V0cHV0SW50ZXJmYWNlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxODoiZ2V0T3V0cHV0SW50ZXJmYWNlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6Im9wdGlvbnMiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyODoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6IlFST3B0aW9ucyI7fX1zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0SW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTc6IlFST3V0cHV0SW50ZXJmYWNlIjt9fX1zOjUxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUlN0cmluZ1Rlc3Q6OnR5cGVzKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSU3RyaW5nVGVzdDo6dHlwZXMoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6InR5cGVzIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19czo2NToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJTdHJpbmdUZXN0Ojp0ZXN0U2V0TW9kdWxlVmFsdWVzKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2NToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJTdHJpbmdUZXN0Ojp0ZXN0U2V0TW9kdWxlVmFsdWVzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxOToidGVzdFNldE1vZHVsZVZhbHVlcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NjI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSU3RyaW5nVGVzdDo6dGVzdEN1c3RvbU91dHB1dCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1MzoiY292ZXJzIHRoZSBjdXN0b20gb3V0cHV0IGZ1bmN0aW9uYWxpdHkgdmlhIGFuIGV4YW1wbGUiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2MjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJTdHJpbmdUZXN0Ojp0ZXN0Q3VzdG9tT3V0cHV0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoidGVzdEN1c3RvbU91dHB1dCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/1/F/EmnrkE861UcqQRcGjKrg b/files/1/F/EmnrkE861UcqQRcGjKrg
deleted file mode 100644
index e6ddc6b4a..000000000
--- a/files/1/F/EmnrkE861UcqQRcGjKrg
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Ab31d16eab64d6e98936bd9a7132dee28-ee6657e5cb73de07f2120f02b1cc0be5
-s:22496:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTI6IkNsYXNzIFFSRnBkZiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo0ODoiaHR0cHM6Ly9naXRodWIuY29tL2NoaWxsZXJsYW4vcGhwLXFyY29kZS9wdWxsLzQ5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6NTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IlFSRnBkZi5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIwMy4wNi4yMDIwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyNDoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjE3OiJNYXhpbWlsaWFuIEtyZXNzZSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czowOiIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiZWU2NjU3ZTVjYjczZGUwN2YyMTIwZjAyYjFjYzBiZTUiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxMDoiUVJGcGRmLnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjIxOiJzcmMvT3V0cHV0L1FSRnBkZi5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjI0Mzc6Ijw/cGhwCi8qKgogKiBDbGFzcyBRUkZwZGYKICoKICogaHR0cHM6Ly9naXRodWIuY29tL2NoaWxsZXJsYW4vcGhwLXFyY29kZS9wdWxsLzQ5CiAqCiAqIEBmaWxlc291cmNlICAgUVJGcGRmLnBocAogKiBAY3JlYXRlZCAgICAgIDAzLjA2LjIwMjAKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQKICogQGF1dGhvciAgICAgICBNYXhpbWlsaWFuIEtyZXNzZQogKgogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQ7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDsKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZUV4Y2VwdGlvbjsKdXNlIGNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2U7CnVzZSBGUERGOwoKdXNlIGZ1bmN0aW9uIGFycmF5X3ZhbHVlcywgY2xhc3NfZXhpc3RzLCBjb3VudCwgaXNfYXJyYXk7CgovKioKICogUVJGcGRmIG91dHB1dCBtb2R1bGUgKHJlcXVpcmVzIGZwZGYpCiAqCiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL1NldGFzaWduL0ZQREYKICogQHNlZSBodHRwOi8vd3d3LmZwZGYub3JnLwogKi8KY2xhc3MgUVJGcGRmIGV4dGVuZHMgUVJPdXRwdXRBYnN0cmFjdHsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UgJG9wdGlvbnMsIFFSTWF0cml4ICRtYXRyaXgpewoKCQlpZighY2xhc3NfZXhpc3RzKEZQREY6OmNsYXNzKSl7CgkJCS8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVTdGFydAoJCQl0aHJvdyBuZXcgUVJDb2RlRXhjZXB0aW9uKAoJCQkJJ1RoZSBRUkZwZGYgb3V0cHV0IHJlcXVpcmVzIEZQREYgYXMgZGVwZW5kZW5jeSBidXQgdGhlIGNsYXNzICJcRlBERiIgY291bGRuXCd0IGJlIGZvdW5kLicKCQkJKTsKCQkJLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAoJCX0KCgkJcGFyZW50OjpfX2NvbnN0cnVjdCgkb3B0aW9ucywgJG1hdHJpeCk7Cgl9CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0TW9kdWxlVmFsdWVzKCk6dm9pZHsKCgkJZm9yZWFjaCgkdGhpczo6REVGQVVMVF9NT0RVTEVfVkFMVUVTIGFzICRNX1RZUEUgPT4gJGRlZmF1bHRWYWx1ZSl7CgkJCSR2ID0gJHRoaXMtPm9wdGlvbnMtPm1vZHVsZVZhbHVlc1skTV9UWVBFXSA/PyBudWxsOwoKCQkJaWYoIWlzX2FycmF5KCR2KSB8fCBjb3VudCgkdikgPCAzKXsKCQkJCSR0aGlzLT5tb2R1bGVWYWx1ZXNbJE1fVFlQRV0gPSAkZGVmYXVsdFZhbHVlCgkJCQkJPyBbMCwgMCwgMF0KCQkJCQk6IFsyNTUsIDI1NSwgMjU1XTsKCQkJfQoJCQllbHNlewoJCQkJJHRoaXMtPm1vZHVsZVZhbHVlc1skTV9UWVBFXSA9IGFycmF5X3ZhbHVlcygkdik7CgkJCX0KCgkJfQoKCX0KCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKgoJICogQHJldHVybiBzdHJpbmd8XEZQREYKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGR1bXAoc3RyaW5nICRmaWxlID0gbnVsbCl7CgkJJGZpbGUgPz89ICR0aGlzLT5vcHRpb25zLT5jYWNoZWZpbGU7CgoJCSRmcGRmID0gbmV3IEZQREYoJ1AnLCAkdGhpcy0+b3B0aW9ucy0+ZnBkZk1lYXN1cmVVbml0LCBbJHRoaXMtPmxlbmd0aCwgJHRoaXMtPmxlbmd0aF0pOwoJCSRmcGRmLT5BZGRQYWdlKCk7CgoJCSRwcmV2Q29sb3IgPSBudWxsOwoKCQlmb3JlYWNoKCR0aGlzLT5tYXRyaXgtPm1hdHJpeCgpIGFzICR5ID0+ICRyb3cpewoKCQkJZm9yZWFjaCgkcm93IGFzICR4ID0+ICRNX1RZUEUpewoJCQkJLyoqIEB2YXIgaW50ICRNX1RZUEUgKi8KCQkJCSRjb2xvciA9ICR0aGlzLT5tb2R1bGVWYWx1ZXNbJE1fVFlQRV07CgoJCQkJaWYoJHByZXZDb2xvciA9PT0gbnVsbCB8fCAkcHJldkNvbG9yICE9PSAkY29sb3IpewoJCQkJCS8qKiBAcGhhbi1zdXBwcmVzcy1uZXh0LWxpbmUgUGhhblBhcmFtVG9vRmV3VW5wYWNrICovCgkJCQkJJGZwZGYtPlNldEZpbGxDb2xvciguLi4kY29sb3IpOwoJCQkJCSRwcmV2Q29sb3IgPSAkY29sb3I7CgkJCQl9CgoJCQkJJGZwZGYtPlJlY3QoJHggKiAkdGhpcy0+c2NhbGUsICR5ICogJHRoaXMtPnNjYWxlLCAxICogJHRoaXMtPnNjYWxlLCAxICogJHRoaXMtPnNjYWxlLCAnRicpOwoJCQl9CgoJCX0KCgkJaWYoJHRoaXMtPm9wdGlvbnMtPnJldHVyblJlc291cmNlKXsKCQkJcmV0dXJuICRmcGRmOwoJCX0KCgkJJHBkZkRhdGEgPSAkZnBkZi0+T3V0cHV0KCdTJyk7CgoJCWlmKCRmaWxlICE9PSBudWxsKXsKCQkJJHRoaXMtPnNhdmVUb0ZpbGUoJHBkZkRhdGEsICRmaWxlKTsKCQl9CgoJCWlmKCR0aGlzLT5vcHRpb25zLT5pbWFnZUJhc2U2NCl7CgkJCSRwZGZEYXRhID0gc3ByaW50ZignZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0LCVzJywgYmFzZTY0X2VuY29kZSgkcGRmRGF0YSkpOwoJCX0KCgkJcmV0dXJuICRwZGZEYXRhOwoJfQoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjI1OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjU6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJPdXRwdXQiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkZwZGYiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJGcGRmIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiUVJGcGRmIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozNjoiUVJGcGRmIG91dHB1dCBtb2R1bGUgKHJlcXVpcmVzIGZwZGYpIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjI6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjUyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsIjoxOntzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybAB1cmkiO3M6MzI6Imh0dHBzOi8vZ2l0aHViLmNvbS9TZXRhc2lnbi9GUERGIjt9czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjUyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsIjoxOntzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybAB1cmkiO3M6MjA6Imh0dHA6Ly93d3cuZnBkZi5vcmcvIjt9czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjQ6e3M6ODoiUVJNYXRyaXgiO3M6MzE6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MTU6IlFSQ29kZUV4Y2VwdGlvbiI7czozMzoiY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlRXhjZXB0aW9uIjtzOjI2OiJTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZSI7czo0NjoiY2hpbGxlcmxhblxTZXR0aW5nc1xTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZSI7czo0OiJGUERGIjtzOjQ6IkZQREYiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0QWJzdHJhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoiUVJPdXRwdXRBYnN0cmFjdCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6Mzp7czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkZwZGY6Ol9fY29uc3RydWN0KCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO047czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJGcGRmOjpfX2NvbnN0cnVjdCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6Il9fY29uc3RydWN0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6Im9wdGlvbnMiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NzoiXGNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNjoiU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NjoibWF0cml4IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiUVJNYXRyaXgiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e319czo1MToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkZwZGY6OnNldE1vZHVsZVZhbHVlcygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJGcGRmOjpzZXRNb2R1bGVWYWx1ZXMoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJzZXRNb2R1bGVWYWx1ZXMiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSRnBkZjo6ZHVtcCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU6IlxGUERGIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiRlBERiI7fX19czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkZwZGY6OmR1bXAoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6ImR1bXAiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoiZmlsZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtzOjQ6Im51bGwiO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/1/Y/K8RD9eHuXlfSK5izu3eA b/files/1/Y/K8RD9eHuXlfSK5izu3eA
deleted file mode 100644
index a06a5769a..000000000
--- a/files/1/Y/K8RD9eHuXlfSK5izu3eA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A517f664c9d4b66de958e7810bb791d32-a1b3484ef4680c325ea89309945167dc
-s:99692:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTg6IkNsYXNzIFFSTWF0cml4VGVzdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxNjoiUVJNYXRyaXhUZXN0LnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjE3LjExLjIwMTciO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI2OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNyBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiYTFiMzQ4NGVmNDY4MGMzMjVlYTg5MzA5OTQ1MTY3ZGMiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxNjoiUVJNYXRyaXhUZXN0LnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjI3OiJ0ZXN0cy9EYXRhL1FSTWF0cml4VGVzdC5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjEwNjk3OiI8P3BocAovKioKICogQ2xhc3MgUVJNYXRyaXhUZXN0CiAqCiAqIEBmaWxlc291cmNlICAgUVJNYXRyaXhUZXN0LnBocAogKiBAY3JlYXRlZCAgICAgIDE3LjExLjIwMTcKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YQogKiBAYXV0aG9yICAgICAgIFNtaWxleSA8c21pbGV5QGNoaWxsZXJsYW4ubmV0PgogKiBAY29weXJpZ2h0ICAgIDIwMTcgU21pbGV5CiAqIEBsaWNlbnNlICAgICAgTUlUCiAqLwoKbmFtZXNwYWNlIGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhOwoKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTsKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uczsKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXERhdGFce1FSQ29kZURhdGFFeGNlcHRpb24sIFFSTWF0cml4fTsKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgUmVmbGVjdGlvbkNsYXNzOwoKLyoqCiAqIFRlc3RzIHRoZSBRUk1hdGl4IGNsYXNzCiAqLwpmaW5hbCBjbGFzcyBRUk1hdHJpeFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZXsKCgkvKiogQGludGVybmFsICovCglwcm90ZWN0ZWQgY29uc3QgdmVyc2lvbiA9IDQwOwoJLyoqIEBpbnRlcm5hbCAqLwoJcHJvdGVjdGVkIFFSTWF0cml4ICRtYXRyaXg7CgoJLyoqCgkgKiBpbnZva2VzIGEgUVJNYXRyaXggb2JqZWN0CgkgKgoJICogQGludGVybmFsCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRVcCgpOnZvaWR7CgkJJHRoaXMtPm1hdHJpeCA9ICR0aGlzLT5nZXRNYXRyaXgoJHRoaXM6OnZlcnNpb24pOwoJfQoKCS8qKgoJICogc2hvcnRjdXQKCSAqCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE1hdHJpeChpbnQgJHZlcnNpb24pOlFSTWF0cml4ewoJCXJldHVybiAgbmV3IFFSTWF0cml4KCR2ZXJzaW9uLCBRUkNvZGU6OkVDQ19MKTsKCX0KCgkvKioKCSAqIFZhbGlkYXRlcyB0aGUgUVJNYXRyaXggaW5zdGFuY2UKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RJbnN0YW5jZSgpOnZvaWR7CgkJJHRoaXM6OmFzc2VydEluc3RhbmNlT2YoUVJNYXRyaXg6OmNsYXNzLCAkdGhpcy0+bWF0cml4KTsKCX0KCgkvKioKCSAqIFRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhbiBpbnZhbGlkIFFSIHZlcnNpb24gd2FzIGdpdmVuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0SW52YWxpZFZlcnNpb25FeGNlcHRpb24oKTp2b2lkewoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb24oUVJDb2RlRGF0YUV4Y2VwdGlvbjo6Y2xhc3MpOwoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb25NZXNzYWdlKCdpbnZhbGlkIFFSIENvZGUgdmVyc2lvbicpOwoKCQkkdGhpcy0+bWF0cml4ID0gbmV3IFFSTWF0cml4KDQyLCAwKTsKCX0KCgkvKioKCSAqIFRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhbiBpbnZhbGlkIEVDQyBsZXZlbCB3YXMgZ2l2ZW4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RJbnZhbGlkRWNjRXhjZXB0aW9uKCk6dm9pZHsKCQkkdGhpcy0+ZXhwZWN0RXhjZXB0aW9uKFFSQ29kZURhdGFFeGNlcHRpb246OmNsYXNzKTsKCQkkdGhpcy0+ZXhwZWN0RXhjZXB0aW9uTWVzc2FnZSgnaW52YWxpZCBlY2MgbGV2ZWwnKTsKCgkJJHRoaXMtPm1hdHJpeCA9IG5ldyBRUk1hdHJpeCgxLCA0Mik7Cgl9CgoJLyoqCgkgKiBUZXN0cyBpZiBzaXplKCkgcmV0dXJucyB0aGUgYWN0dWFsIG1hdHJpeCBzaXplL2NvdW50CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0U2l6ZSgpOnZvaWR7CgkJJHRoaXM6OmFzc2VydENvdW50KCR0aGlzLT5tYXRyaXgtPnNpemUoKSwgJHRoaXMtPm1hdHJpeC0+bWF0cml4KCkpOwoJfQoKCS8qKgoJICogVGVzdHMgaWYgdmVyc2lvbigpIHJldHVybnMgdGhlIGN1cnJlbnQgKGdpdmVuKSB2ZXJzaW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0VmVyc2lvbigpOnZvaWR7CgkJJHRoaXM6OmFzc2VydFNhbWUoJHRoaXM6OnZlcnNpb24sICR0aGlzLT5tYXRyaXgtPnZlcnNpb24oKSk7Cgl9CgoJLyoqCgkgKiBUZXN0cyBpZiBlY2NMZXZlbCgpIHJldHVybnMgdGhlIGN1cnJlbnQgKGdpdmVuKSBFQ0MgbGV2ZWwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RFQ0MoKTp2b2lkewoJCSR0aGlzOjphc3NlcnRTYW1lKFFSQ29kZTo6RUNDX0wsICR0aGlzLT5tYXRyaXgtPmVjY0xldmVsKCkpOwoJfQoKCS8qKgoJICogVGVzdHMgaWYgbWFza1BhdHRlcm4oKSByZXR1cm5zIHRoZSBjdXJyZW50IChvciBkZWZhdWx0KSBtYXNrIHBhdHRlcm4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RNYXNrUGF0dGVybigpOnZvaWR7CgkJJHRoaXM6OmFzc2VydFNhbWUoLTEsICR0aGlzLT5tYXRyaXgtPm1hc2tQYXR0ZXJuKCkpOyAvLyBkZWZhdWx0CgoJCS8vIEB0b2RvOiBhY3R1YWwgbWFzayBwYXR0ZXJuIGFmdGVyIG1hcERhdGEoKQoJfQoKCS8qKgoJICogVGVzdHMgdGhlIHNldCgpLCBnZXQoKSBhbmQgY2hlY2soKSBtZXRob2RzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0U2V0Q2hlY2soKTp2b2lkewoJCSR0aGlzLT5tYXRyaXgtPnNldCgxMCwgMTAsIHRydWUsIFFSTWF0cml4OjpNX1RFU1QpOwoJCSR0aGlzOjphc3NlcnRTYW1lKDY1MjgwLCAkdGhpcy0+bWF0cml4LT5nZXQoMTAsIDEwKSk7CgkJJHRoaXM6OmFzc2VydFRydWUoJHRoaXMtPm1hdHJpeC0+Y2hlY2soMTAsIDEwKSk7CgoJCSR0aGlzLT5tYXRyaXgtPnNldCgyMCwgMjAsIGZhbHNlLCBRUk1hdHJpeDo6TV9URVNUKTsKCQkkdGhpczo6YXNzZXJ0U2FtZSgyNTUsICR0aGlzLT5tYXRyaXgtPmdldCgyMCwgMjApKTsKCQkkdGhpczo6YXNzZXJ0RmFsc2UoJHRoaXMtPm1hdHJpeC0+Y2hlY2soMjAsIDIwKSk7Cgl9CgoJLyoqCgkgKiBWZXJzaW9uIGRhdGEgcHJvdmlkZXIgZm9yIHNldmVyYWwgcGF0dGVybiB0ZXN0cwoJICoKCSAqIEByZXR1cm4gaW50W11bXQoJICogQGludGVybmFsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB2ZXJzaW9uUHJvdmlkZXIoKTphcnJheXsKCQkkdmVyc2lvbnMgPSBbXTsKCgkJZm9yKCRpID0gMTsgJGkgPD0gNDA7ICRpKyspewoJCQkkdmVyc2lvbnNbXSA9IFskaV07CgkJfQoKCQlyZXR1cm4gJHZlcnNpb25zOwoJfQoKCS8qKgoJICogVGVzdHMgc2V0dGluZyB0aGUgZGFyayBtb2R1bGUgYW5kIHZlcmlmaWVzIGl0cyBwb3NpdGlvbgoJICoKCSAqIEBkYXRhUHJvdmlkZXIgdmVyc2lvblByb3ZpZGVyCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0U2V0RGFya01vZHVsZShpbnQgJHZlcnNpb24pOnZvaWR7CgkJJG1hdHJpeCA9ICR0aGlzLT5nZXRNYXRyaXgoJHZlcnNpb24pLT5zZXREYXJrTW9kdWxlKCk7CgoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX0RBUktNT0RVTEUgPDwgOCwgJG1hdHJpeC0+Z2V0KDgsICRtYXRyaXgtPnNpemUoKSAtIDgpKTsKCX0KCgkvKioKCSAqIFRlc3RzIHNldHRpbmcgdGhlIGZpbmRlciBwYXR0ZXJucyBhbmQgdmVyaWZpZXMgdGhlaXIgcG9zaXRpb25zCgkgKgoJICogQGRhdGFQcm92aWRlciB2ZXJzaW9uUHJvdmlkZXIKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RTZXRGaW5kZXJQYXR0ZXJuKGludCAkdmVyc2lvbik6dm9pZHsKCQkkbWF0cml4ID0gJHRoaXMtPmdldE1hdHJpeCgkdmVyc2lvbiktPnNldEZpbmRlclBhdHRlcm4oKTsKCgkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fRklOREVSIDw8IDgsICRtYXRyaXgtPmdldCgwLCAwKSk7CgkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fRklOREVSIDw8IDgsICRtYXRyaXgtPmdldCgwLCAkbWF0cml4LT5zaXplKCkgLSAxKSk7CgkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fRklOREVSIDw8IDgsICRtYXRyaXgtPmdldCgkbWF0cml4LT5zaXplKCkgLSAxLCAwKSk7Cgl9CgoJLyoqCgkgKiBUZXN0cyB0aGUgc2VwYXJhdG9yIHBhdHRlcm5zIGFuZCB2ZXJpZmllcyB0aGVpciBwb3NpdGlvbnMKCSAqCgkgKiBAZGF0YVByb3ZpZGVyIHZlcnNpb25Qcm92aWRlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdFNldFNlcGFyYXRvcnMoaW50ICR2ZXJzaW9uKTp2b2lkewoJCSRtYXRyaXggPSAkdGhpcy0+Z2V0TWF0cml4KCR2ZXJzaW9uKS0+c2V0U2VwYXJhdG9ycygpOwoKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9TRVBBUkFUT1IsICRtYXRyaXgtPmdldCg3LCAwKSk7CgkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fU0VQQVJBVE9SLCAkbWF0cml4LT5nZXQoMCwgNykpOwoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX1NFUEFSQVRPUiwgJG1hdHJpeC0+Z2V0KDAsICRtYXRyaXgtPnNpemUoKSAtIDgpKTsKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9TRVBBUkFUT1IsICRtYXRyaXgtPmdldCgkbWF0cml4LT5zaXplKCkgLSA4LCAwKSk7Cgl9CgoJLyoqCgkgKiBUZXN0cyB0aGUgYWxpZ25tZW50IHBhdHRlcm5zIGFuZCB2ZXJpZmllcyB0aGVpciBwb3NpdGlvbnMgLSB2ZXJzaW9uIDEgKG5vIHBhdHRlcm4pIHNraXBwZWQKCSAqCgkgKiBAZGF0YVByb3ZpZGVyIHZlcnNpb25Qcm92aWRlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdFNldEFsaWdubWVudFBhdHRlcm4oaW50ICR2ZXJzaW9uKTp2b2lkewoKCQlpZigkdmVyc2lvbiA9PT0gMSl7CgkJCSR0aGlzLT5tYXJrVGVzdFNraXBwZWQoJ04vQScpOwoKCQkJLyoqIEBub2luc3BlY3Rpb24gUGhwVW5yZWFjaGFibGVTdGF0ZW1lbnRJbnNwZWN0aW9uICovCgkJCXJldHVybjsKCQl9CgoJCSRtYXRyaXggPSAkdGhpcwoJCQktPmdldE1hdHJpeCgkdmVyc2lvbikKCQkJLT5zZXRGaW5kZXJQYXR0ZXJuKCkKCQkJLT5zZXRBbGlnbm1lbnRQYXR0ZXJuKCkKCQk7CgoJCSRhbGlnbm1lbnRQYXR0ZXJuID0gKG5ldyBSZWZsZWN0aW9uQ2xhc3MoUVJNYXRyaXg6OmNsYXNzKSktPmdldENvbnN0YW50KCdhbGlnbm1lbnRQYXR0ZXJuJylbJHZlcnNpb25dOwoKCQlmb3JlYWNoKCRhbGlnbm1lbnRQYXR0ZXJuIGFzICRweSl7CgkJCWZvcmVhY2goJGFsaWdubWVudFBhdHRlcm4gYXMgJHB4KXsKCgkJCQlpZigkbWF0cml4LT5nZXQoJHB4LCAkcHkpID09PSBRUk1hdHJpeDo6TV9GSU5ERVIgPDwgOCl7CgkJCQkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fRklOREVSIDw8IDgsICRtYXRyaXgtPmdldCgkcHgsICRweSksICdza2lwcGVkIGZpbmRlciBwYXR0ZXJuJyk7CgkJCQkJY29udGludWU7CgkJCQl9CgoJCQkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fQUxJR05NRU5UIDw8IDgsICRtYXRyaXgtPmdldCgkcHgsICRweSkpOwoJCQl9CgkJfQoKCX0KCgkvKioKCSAqIFRlc3RzIHRoZSB0aW1pbmcgcGF0dGVybnMgYW5kIHZlcmlmaWVzIHRoZWlyIHBvc2l0aW9ucwoJICoKCSAqIEBkYXRhUHJvdmlkZXIgdmVyc2lvblByb3ZpZGVyCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0U2V0VGltaW5nUGF0dGVybihpbnQgJHZlcnNpb24pOnZvaWR7CgoJCSRtYXRyaXggPSAkdGhpcwoJCQktPmdldE1hdHJpeCgkdmVyc2lvbikKCQkJLT5zZXRBbGlnbm1lbnRQYXR0ZXJuKCkKCQkJLT5zZXRUaW1pbmdQYXR0ZXJuKCkKCQk7CgoJCSRzaXplID0gJG1hdHJpeC0+c2l6ZSgpOwoKCQlmb3IoJGkgPSA3OyAkaSA8ICRzaXplIC0gNzsgJGkrKyl7CgkJCWlmKCRpICUgMiA9PT0gMCl7CgkJCQkkcDEgPSAkbWF0cml4LT5nZXQoNiwgJGkpOwoKCQkJCWlmKCRwMSA9PT0gUVJNYXRyaXg6Ok1fQUxJR05NRU5UIDw8IDgpewoJCQkJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX0FMSUdOTUVOVCA8PCA4LCAkcDEsICdza2lwcGVkIGFsaWdubWVudCBwYXR0ZXJuJyk7CgkJCQkJY29udGludWU7CgkJCQl9CgoJCQkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fVElNSU5HIDw8IDgsICRwMSk7CgkJCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9USU1JTkcgPDwgOCwgJG1hdHJpeC0+Z2V0KCRpLCA2KSk7CgkJCX0KCQl9Cgl9CgoJLyoqCgkgKiBUZXN0cyB0aGUgdmVyc2lvbiBwYXR0ZXJucyBhbmQgdmVyaWZpZXMgdGhlaXIgcG9zaXRpb25zIC0gdmVyc2lvbiA8IDcgc2tpcHBlZAoJICoKCSAqIEBkYXRhUHJvdmlkZXIgdmVyc2lvblByb3ZpZGVyCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0U2V0VmVyc2lvbk51bWJlcihpbnQgJHZlcnNpb24pOnZvaWR7CgoJCWlmKCR2ZXJzaW9uIDwgNyl7CgkJCSR0aGlzLT5tYXJrVGVzdFNraXBwZWQoJ04vQScpOwoKCQkJLyoqIEBub2luc3BlY3Rpb24gUGhwVW5yZWFjaGFibGVTdGF0ZW1lbnRJbnNwZWN0aW9uICovCgkJCXJldHVybjsKCQl9CgoJCSRtYXRyaXggPSAkdGhpcy0+Z2V0TWF0cml4KCR2ZXJzaW9uKS0+c2V0VmVyc2lvbk51bWJlcih0cnVlKTsKCgkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fVkVSU0lPTiwgJG1hdHJpeC0+Z2V0KCRtYXRyaXgtPnNpemUoKSAtIDksIDApKTsKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9WRVJTSU9OLCAkbWF0cml4LT5nZXQoJG1hdHJpeC0+c2l6ZSgpIC0gMTEsIDUpKTsKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9WRVJTSU9OLCAkbWF0cml4LT5nZXQoMCwgJG1hdHJpeC0+c2l6ZSgpIC0gOSkpOwoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX1ZFUlNJT04sICRtYXRyaXgtPmdldCg1LCAkbWF0cml4LT5zaXplKCkgLSAxMSkpOwoJfQoKCS8qKgoJICogVGVzdHMgdGhlIGZvcm1hdCBwYXR0ZXJucyBhbmQgdmVyaWZpZXMgdGhlaXIgcG9zaXRpb25zCgkgKgoJICogQGRhdGFQcm92aWRlciB2ZXJzaW9uUHJvdmlkZXIKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RTZXRGb3JtYXRJbmZvKGludCAkdmVyc2lvbik6dm9pZHsKCQkkbWF0cml4ID0gJHRoaXMtPmdldE1hdHJpeCgkdmVyc2lvbiktPnNldEZvcm1hdEluZm8oMCwgdHJ1ZSk7CgoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX0ZPUk1BVCwgJG1hdHJpeC0+Z2V0KDgsIDApKTsKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9GT1JNQVQsICRtYXRyaXgtPmdldCgwLCA4KSk7CgkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fRk9STUFULCAkbWF0cml4LT5nZXQoJG1hdHJpeC0+c2l6ZSgpIC0gMSwgOCkpOwoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX0ZPUk1BVCwgJG1hdHJpeC0+Z2V0KCRtYXRyaXgtPnNpemUoKSAtIDgsIDgpKTsKCX0KCgkvKioKCSAqIFRlc3RzIHRoZSBxdWlldCB6b25lIHBhdHRlcm4gYW5kIHZlcmlmaWVzIGl0cyBwb3NpdGlvbgoJICoKCSAqIEBkYXRhUHJvdmlkZXIgdmVyc2lvblByb3ZpZGVyCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0U2V0UXVpZXRab25lKGludCAkdmVyc2lvbik6dm9pZHsKCQkkbWF0cml4ID0gJHRoaXMtPmdldE1hdHJpeCgkdmVyc2lvbik7CgoJCSRzaXplID0gJG1hdHJpeC0+c2l6ZSgpOwoJCSRxICAgID0gNTsKCgkJJG1hdHJpeC0+c2V0KDAsIDAsIHRydWUsIFFSTWF0cml4OjpNX1RFU1QpOwoJCSRtYXRyaXgtPnNldCgkc2l6ZSAtIDEsICRzaXplIC0gMSwgdHJ1ZSwgUVJNYXRyaXg6Ok1fVEVTVCk7CgoJCSRtYXRyaXgtPnNldFF1aWV0Wm9uZSgkcSk7CgoJCSR0aGlzOjphc3NlcnRDb3VudCgkc2l6ZSArIDIgKiAkcSwgJG1hdHJpeC0+bWF0cml4KCkpOwoJCSR0aGlzOjphc3NlcnRDb3VudCgkc2l6ZSArIDIgKiAkcSwgJG1hdHJpeC0+bWF0cml4KClbJHNpemUgLSAxXSk7CgoJCSRzaXplID0gJG1hdHJpeC0+c2l6ZSgpOwoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX1FVSUVUWk9ORSwgJG1hdHJpeC0+Z2V0KDAsIDApKTsKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9RVUlFVFpPTkUsICRtYXRyaXgtPmdldCgkc2l6ZSAtIDEsICRzaXplIC0gMSkpOwoKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9URVNUIDw8IDgsICRtYXRyaXgtPmdldCgkcSwgJHEpKTsKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9URVNUIDw8IDgsICRtYXRyaXgtPmdldCgkc2l6ZSAtIDEgLSAkcSwgJHNpemUgLSAxIC0gJHEpKTsKCX0KCgkvKioKCSAqIFRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaW4gYW4gYXR0ZW1wdCB0byBjcmVhdGUgaXQgYmVmb3JlIGRhdGEgd2FzIHdyaXR0ZW4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RTZXRRdWlldFpvbmVFeGNlcHRpb24oKTp2b2lkewoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb24oUVJDb2RlRGF0YUV4Y2VwdGlvbjo6Y2xhc3MpOwoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb25NZXNzYWdlKCd1c2Ugb25seSBhZnRlciB3cml0aW5nIGRhdGEnKTsKCgkJJHRoaXMtPm1hdHJpeC0+c2V0UXVpZXRab25lKCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHRlc3RTZXRMb2dvU3BhY2VPcmllbnRhdGlvbigpOnZvaWR7CgkJJG8gPSBuZXcgUVJPcHRpb25zOwoJCSRvLT52ZXJzaW9uICAgICAgPSAxMDsKCQkkby0+ZWNjTGV2ZWwgICAgID0gUVJDb2RlOjpFQ0NfSDsKCQkkby0+YWRkUXVpZXR6b25lID0gZmFsc2U7CgoJCSRtYXRyaXggPSAobmV3IFFSQ29kZSgkbykpLT5nZXRNYXRyaXgoJ3Rlc3RkYXRhJyk7CgkJLy8gYWxzbyB0ZXN0aW5nIHNpemUgYWRqdXN0bWVudCB0byB1bmV2ZW4gbnVtYmVycwoJCSRtYXRyaXgtPnNldExvZ29TcGFjZSgyMCwgMTQpOwoKCQkvLyBOVyBjb3JuZXIKCQkkdGhpczo6YXNzZXJ0Tm90U2FtZShRUk1hdHJpeDo6TV9MT0dPLCAkbWF0cml4LT5nZXQoMTcsIDIwKSk7CgkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fTE9HTywgJG1hdHJpeC0+Z2V0KDE4LCAyMSkpOwoKCQkvLyBTRSBjb3JuZXIKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9MT0dPLCAkbWF0cml4LT5nZXQoMzgsIDM1KSk7CgkJJHRoaXM6OmFzc2VydE5vdFNhbWUoUVJNYXRyaXg6Ok1fTE9HTywgJG1hdHJpeC0+Z2V0KDM5LCAzNikpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0ZXN0U2V0TG9nb1NwYWNlUG9zaXRpb24oKTp2b2lkewoJCSRvID0gbmV3IFFST3B0aW9uczsKCQkkby0+dmVyc2lvbiAgICAgICA9IDEwOwoJCSRvLT5lY2NMZXZlbCAgICAgID0gUVJDb2RlOjpFQ0NfSDsKCQkkby0+YWRkUXVpZXR6b25lICA9IHRydWU7CgkJJG8tPnF1aWV0em9uZVNpemUgPSAxMDsKCgkJJG0gPSAobmV3IFFSQ29kZSgkbykpLT5nZXRNYXRyaXgoJ3Rlc3RkYXRhJyk7CgoJCS8vIGxvZ28gc3BhY2Ugc2hvdWxkIG5vdCBvdmVyd3JpdGUgcXVpZXQgem9uZSAmIGZ1bmN0aW9uIHBhdHRlcm5zCgkJJG0tPnNldExvZ29TcGFjZSgyMSwgMjEsIC0xMCwgLTEwKTsKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9RVUlFVFpPTkUsICRtLT5nZXQoOSwgOSkpOwoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX0ZJTkRFUiA8PCA4LCAkbS0+Z2V0KDEwLCAxMCkpOwoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX0ZJTkRFUiA8PCA4LCAkbS0+Z2V0KDE2LCAxNikpOwoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX1NFUEFSQVRPUiwgJG0tPmdldCgxNywgMTcpKTsKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9GT1JNQVQgPDwgOCwgJG0tPmdldCgxOCwgMTgpKTsKCQkkdGhpczo6YXNzZXJ0U2FtZShRUk1hdHJpeDo6TV9MT0dPLCAkbS0+Z2V0KDE5LCAxOSkpOwoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX0xPR08sICRtLT5nZXQoMjAsIDIwKSk7CgkJJHRoaXM6OmFzc2VydE5vdFNhbWUoUVJNYXRyaXg6Ok1fTE9HTywgJG0tPmdldCgyMSwgMjEpKTsKCgkJLy8gaSBqdXN0IHJlYWxpemVkIHRoYXQgc2V0TG9nb1NwYWNlKCkgY291bGQgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzCgkJLy8gb24gdGhlIHNhbWUgaW5zdGFuY2UgYW5kIGknbSBub3QgZ29pbmcgdG8gZG8gYW55dGhpbmcgYWJvdXQgaXQgOlAKCQkkbS0+c2V0TG9nb1NwYWNlKDIxLCAyMSwgNDUsIDQ1KTsKCQkkdGhpczo6YXNzZXJ0Tm90U2FtZShRUk1hdHJpeDo6TV9MT0dPLCAkbS0+Z2V0KDU0LCA1NCkpOwoJCSR0aGlzOjphc3NlcnRTYW1lKFFSTWF0cml4OjpNX0xPR08sICRtLT5nZXQoNTUsIDU1KSk7CgkJJHRoaXM6OmFzc2VydFNhbWUoUVJNYXRyaXg6Ok1fUVVJRVRaT05FLCAkbS0+Z2V0KDY3LCA2NykpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0ZXN0U2V0TG9nb1NwYWNlSW52YWxpZEVjY0V4Y2VwdGlvbigpOnZvaWR7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbihRUkNvZGVEYXRhRXhjZXB0aW9uOjpjbGFzcyk7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbk1lc3NhZ2UoJ0VDQyBsZXZlbCAiSCIgcmVxdWlyZWQgdG8gYWRkIGxvZ28gc3BhY2UnKTsKCgkJKG5ldyBRUkNvZGUpLT5nZXRNYXRyaXgoJ3Rlc3RkYXRhJyktPnNldExvZ29TcGFjZSg1MCwgNTApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0ZXN0U2V0TG9nb1NwYWNlTWF4U2l6ZUV4Y2VwdGlvbigpOnZvaWR7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbihRUkNvZGVEYXRhRXhjZXB0aW9uOjpjbGFzcyk7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbk1lc3NhZ2UoJ2xvZ28gc3BhY2UgZXhjZWVkcyB0aGUgbWF4aW11bSBlcnJvciBjb3JyZWN0aW9uIGNhcGFjaXR5Jyk7CgoJCSRvID0gbmV3IFFST3B0aW9uczsKCQkkby0+dmVyc2lvbiAgPSA1OwoJCSRvLT5lY2NMZXZlbCA9IFFSQ29kZTo6RUNDX0g7CgoJCShuZXcgUVJDb2RlKCRvKSktPmdldE1hdHJpeCgndGVzdGRhdGEnKS0+c2V0TG9nb1NwYWNlKDUwLCA1MCk7Cgl9Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6Mjc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGEiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJEYXRhIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6NDA6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3QiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDA6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMjoiUVJNYXRyaXhUZXN0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoyMzoiVGVzdHMgdGhlIFFSTWF0aXggY2xhc3MiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MjY6ImNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTo2OntzOjY6IlFSQ29kZSI7czoyNDoiY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlIjtzOjk6IlFST3B0aW9ucyI7czoyNzoiY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zIjtzOjE5OiJRUkNvZGVEYXRhRXhjZXB0aW9uIjtzOjQyOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24iO3M6ODoiUVJNYXRyaXgiO3M6MzE6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6ODoiVGVzdENhc2UiO3M6MjY6IlBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlIjtzOjE1OiJSZWZsZWN0aW9uQ2xhc3MiO3M6MTU6IlJlZmxlY3Rpb25DbGFzcyI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZmluYWwiO2I6MTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcGFyZW50IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjc6IlxQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6IlRlc3RDYXNlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MTp7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dmVyc2lvbiI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dmVyc2lvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6InZlcnNpb24iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjI6IjQwIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YToxOntzOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0OjokbWF0cml4IjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0OjokbWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoibWF0cml4Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6IlFSTWF0cml4Ijt9fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6MjQ6e3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnNldFVwKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjI1OiJpbnZva2VzIGEgUVJNYXRyaXggb2JqZWN0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0OjpzZXRVcCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NToic2V0VXAiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjUzOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0OjpnZXRNYXRyaXgoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6ODoic2hvcnRjdXQiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTM6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OmdldE1hdHJpeCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiZ2V0TWF0cml4Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6InZlcnNpb24iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJRUk1hdHJpeCI7fX19czo1NjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdEluc3RhbmNlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMxOiJWYWxpZGF0ZXMgdGhlIFFSTWF0cml4IGluc3RhbmNlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTY6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RJbnN0YW5jZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTI6InRlc3RJbnN0YW5jZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NzE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RJbnZhbGlkVmVyc2lvbkV4Y2VwdGlvbigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo2ODoiVGVzdHMgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIGFuIGludmFsaWQgUVIgdmVyc2lvbiB3YXMgZ2l2ZW4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo3MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdEludmFsaWRWZXJzaW9uRXhjZXB0aW9uKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNzoidGVzdEludmFsaWRWZXJzaW9uRXhjZXB0aW9uIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo2NzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdEludmFsaWRFY2NFeGNlcHRpb24oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Njc6IlRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhbiBpbnZhbGlkIEVDQyBsZXZlbCB3YXMgZ2l2ZW4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2NzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdEludmFsaWRFY2NFeGNlcHRpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIzOiJ0ZXN0SW52YWxpZEVjY0V4Y2VwdGlvbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RTaXplKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjUyOiJUZXN0cyBpZiBzaXplKCkgcmV0dXJucyB0aGUgYWN0dWFsIG1hdHJpeCBzaXplL2NvdW50IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RTaXplKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJ0ZXN0U2l6ZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NTU6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RWZXJzaW9uKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjU0OiJUZXN0cyBpZiB2ZXJzaW9uKCkgcmV0dXJucyB0aGUgY3VycmVudCAoZ2l2ZW4pIHZlcnNpb24iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo4MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1NToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFZlcnNpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJ0ZXN0VmVyc2lvbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo4NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RFQ0MoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTc6IlRlc3RzIGlmIGVjY0xldmVsKCkgcmV0dXJucyB0aGUgY3VycmVudCAoZ2l2ZW4pIEVDQyBsZXZlbCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjkwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0RUNDKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJ0ZXN0RUNDIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjkzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo1OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdE1hc2tQYXR0ZXJuKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjY4OiJUZXN0cyBpZiBtYXNrUGF0dGVybigpIHJldHVybnMgdGhlIGN1cnJlbnQgKG9yIGRlZmF1bHQpIG1hc2sgcGF0dGVybiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjk3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0TWFza1BhdHRlcm4oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJ0ZXN0TWFza1BhdHRlcm4iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTAwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo1OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdEdldFNldENoZWNrKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQyOiJUZXN0cyB0aGUgc2V0KCksIGdldCgpIGFuZCBjaGVjaygpIG1ldGhvZHMiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RHZXRTZXRDaGVjaygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6InRlc3RHZXRTZXRDaGVjayI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjU5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp2ZXJzaW9uUHJvdmlkZXIoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NDc6IlZlcnNpb24gZGF0YSBwcm92aWRlciBmb3Igc2V2ZXJhbCBwYXR0ZXJuIHRlc3RzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjI6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dmVyc2lvblByb3ZpZGVyKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToidmVyc2lvblByb3ZpZGVyIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEyNTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fXM6NjE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RTZXREYXJrTW9kdWxlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjU1OiJUZXN0cyBzZXR0aW5nIHRoZSBkYXJrIG1vZHVsZSBhbmQgdmVyaWZpZXMgaXRzIHBvc2l0aW9uIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6ImRhdGFQcm92aWRlciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTU6InZlcnNpb25Qcm92aWRlciI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTM1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjYxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0RGFya01vZHVsZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTc6InRlc3RTZXREYXJrTW9kdWxlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6InZlcnNpb24iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTQwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo2NDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFNldEZpbmRlclBhdHRlcm4oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NjI6IlRlc3RzIHNldHRpbmcgdGhlIGZpbmRlciBwYXR0ZXJucyBhbmQgdmVyaWZpZXMgdGhlaXIgcG9zaXRpb25zIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6ImRhdGFQcm92aWRlciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTU6InZlcnNpb25Qcm92aWRlciI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTQ2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY0OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0RmluZGVyUGF0dGVybigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjA6InRlc3RTZXRGaW5kZXJQYXR0ZXJuIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6InZlcnNpb24iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTUxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo2MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFNldFNlcGFyYXRvcnMoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTc6IlRlc3RzIHRoZSBzZXBhcmF0b3IgcGF0dGVybnMgYW5kIHZlcmlmaWVzIHRoZWlyIHBvc2l0aW9ucyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEyOiJkYXRhUHJvdmlkZXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE1OiJ2ZXJzaW9uUHJvdmlkZXIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE1OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFNldFNlcGFyYXRvcnMoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJ0ZXN0U2V0U2VwYXJhdG9ycyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJ2ZXJzaW9uIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE2NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6Njc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RTZXRBbGlnbm1lbnRQYXR0ZXJuKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjkwOiJUZXN0cyB0aGUgYWxpZ25tZW50IHBhdHRlcm5zIGFuZCB2ZXJpZmllcyB0aGVpciBwb3NpdGlvbnMgLSB2ZXJzaW9uIDEgKG5vIHBhdHRlcm4pIHNraXBwZWQiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMjoiZGF0YVByb3ZpZGVyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxNToidmVyc2lvblByb3ZpZGVyIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNzM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Njc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RTZXRBbGlnbm1lbnRQYXR0ZXJuKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMzoidGVzdFNldEFsaWdubWVudFBhdHRlcm4iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NzoidmVyc2lvbiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNzg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjY0OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0VGltaW5nUGF0dGVybigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1NDoiVGVzdHMgdGhlIHRpbWluZyBwYXR0ZXJucyBhbmQgdmVyaWZpZXMgdGhlaXIgcG9zaXRpb25zIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6ImRhdGFQcm92aWRlciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTU6InZlcnNpb25Qcm92aWRlciI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjA5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY0OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0VGltaW5nUGF0dGVybigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjA6InRlc3RTZXRUaW1pbmdQYXR0ZXJuIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6InZlcnNpb24iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjE0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo2NDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFNldFZlcnNpb25OdW1iZXIoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Nzc6IlRlc3RzIHRoZSB2ZXJzaW9uIHBhdHRlcm5zIGFuZCB2ZXJpZmllcyB0aGVpciBwb3NpdGlvbnMgLSB2ZXJzaW9uIDwgNyBza2lwcGVkIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6ImRhdGFQcm92aWRlciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTU6InZlcnNpb25Qcm92aWRlciI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjM5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY0OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0VmVyc2lvbk51bWJlcigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjA6InRlc3RTZXRWZXJzaW9uTnVtYmVyIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6InZlcnNpb24iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjQ0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo2MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFNldEZvcm1hdEluZm8oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTQ6IlRlc3RzIHRoZSBmb3JtYXQgcGF0dGVybnMgYW5kIHZlcmlmaWVzIHRoZWlyIHBvc2l0aW9ucyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEyOiJkYXRhUHJvdmlkZXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE1OiJ2ZXJzaW9uUHJvdmlkZXIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI2MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFNldEZvcm1hdEluZm8oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJ0ZXN0U2V0Rm9ybWF0SW5mbyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJ2ZXJzaW9uIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI2NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NjA6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RTZXRRdWlldFpvbmUoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTQ6IlRlc3RzIHRoZSBxdWlldCB6b25lIHBhdHRlcm4gYW5kIHZlcmlmaWVzIGl0cyBwb3NpdGlvbiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEyOiJkYXRhUHJvdmlkZXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE1OiJ2ZXJzaW9uUHJvdmlkZXIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI3NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFNldFF1aWV0Wm9uZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTY6InRlc3RTZXRRdWlldFpvbmUiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NzoidmVyc2lvbiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyODA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjY5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0UXVpZXRab25lRXhjZXB0aW9uKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjgyOiJUZXN0cyBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGl0IGJlZm9yZSBkYXRhIHdhcyB3cml0dGVuIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzAyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0UXVpZXRab25lRXhjZXB0aW9uKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNToidGVzdFNldFF1aWV0Wm9uZUV4Y2VwdGlvbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMDU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjcxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0TG9nb1NwYWNlT3JpZW50YXRpb24oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TjtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo3MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFNldExvZ29TcGFjZU9yaWVudGF0aW9uKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNzoidGVzdFNldExvZ29TcGFjZU9yaWVudGF0aW9uIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMxMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6Njg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxRUk1hdHJpeFRlc3Q6OnRlc3RTZXRMb2dvU3BhY2VQb3NpdGlvbigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtOO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0TG9nb1NwYWNlUG9zaXRpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI0OiJ0ZXN0U2V0TG9nb1NwYWNlUG9zaXRpb24iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzMxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo3OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFNldExvZ29TcGFjZUludmFsaWRFY2NFeGNlcHRpb24oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TjtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo3OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXFFSTWF0cml4VGVzdDo6dGVzdFNldExvZ29TcGFjZUludmFsaWRFY2NFeGNlcHRpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjM1OiJ0ZXN0U2V0TG9nb1NwYWNlSW52YWxpZEVjY0V4Y2VwdGlvbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjc2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0TG9nb1NwYWNlTWF4U2l6ZUV4Y2VwdGlvbigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtOO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjc2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcUVJNYXRyaXhUZXN0Ojp0ZXN0U2V0TG9nb1NwYWNlTWF4U2l6ZUV4Y2VwdGlvbigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MzI6InRlc3RTZXRMb2dvU3BhY2VNYXhTaXplRXhjZXB0aW9uIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM2NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/2/Q/lDC7VJFLVwb+qSBfsrlA b/files/2/Q/lDC7VJFLVwb+qSBfsrlA
deleted file mode 100644
index 17179bd44..000000000
--- a/files/2/Q/lDC7VJFLVwb+qSBfsrlA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A818aad68a0071bd9554b3a113878be07-b6f4278d22a35cb3f14880ec3c0fc84a
-s:53952:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjI6IkNsYXNzIFFST3V0cHV0QWJzdHJhY3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjA6IlFST3V0cHV0QWJzdHJhY3QucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMDkuMTIuMjAxNSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjQ6ImNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNSBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiYjZmNDI3OGQyMmEzNWNiM2YxNDg4MGVjM2MwZmM4NGEiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoyMDoiUVJPdXRwdXRBYnN0cmFjdC5waHAiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czozMToic3JjL091dHB1dC9RUk91dHB1dEFic3RyYWN0LnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6MzA3MToiPD9waHAKLyoqCiAqIENsYXNzIFFST3V0cHV0QWJzdHJhY3QKICoKICogQGZpbGVzb3VyY2UgICBRUk91dHB1dEFic3RyYWN0LnBocAogKiBAY3JlYXRlZCAgICAgIDA5LjEyLjIwMTUKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQ7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVce0RhdGFcUVJNYXRyaXgsIFFSQ29kZX07CnVzZSBjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlOwoKdXNlIGZ1bmN0aW9uIGNhbGxfdXNlcl9mdW5jX2FycmF5LCBkaXJuYW1lLCBmaWxlX3B1dF9jb250ZW50cywgZ2V0X2NhbGxlZF9jbGFzcywgaW5fYXJyYXksIGlzX3dyaXRhYmxlLCBzcHJpbnRmOwoKLyoqCiAqIGNvbW1vbiBvdXRwdXQgYWJzdHJhY3QKICovCmFic3RyYWN0IGNsYXNzIFFST3V0cHV0QWJzdHJhY3QgaW1wbGVtZW50cyBRUk91dHB1dEludGVyZmFjZXsKCgkvKioKCSAqIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIFFSIG1hdHJpeAoJICoKCSAqIEBzZWUgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OnNpemUoKQoJICovCglwcm90ZWN0ZWQgaW50ICRtb2R1bGVDb3VudDsKCgkvKioKCSAqIHRoZSBjdXJyZW50IG91dHB1dCBtb2RlCgkgKgoJICogQHNlZSBcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zOjokb3V0cHV0VHlwZQoJICovCglwcm90ZWN0ZWQgc3RyaW5nICRvdXRwdXRNb2RlOwoKCS8qKgoJICogdGhlIGRlZmF1bHQgb3V0cHV0IG1vZGUgb2YgdGhlIGN1cnJlbnQgb3V0cHV0IG1vZHVsZQoJICovCglwcm90ZWN0ZWQgc3RyaW5nICRkZWZhdWx0TW9kZTsKCgkvKioKCSAqIHRoZSBjdXJyZW50IHNjYWxpbmcgZm9yIGEgUVIgcGl4ZWwKCSAqCgkgKiBAc2VlIFxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnM6OiRzY2FsZQoJICovCglwcm90ZWN0ZWQgaW50ICRzY2FsZTsKCgkvKioKCSAqIHRoZSBzaWRlIGxlbmd0aCBvZiB0aGUgUVIgaW1hZ2UgKG1vZHVsZXMgKiBzY2FsZSkKCSAqLwoJcHJvdGVjdGVkIGludCAkbGVuZ3RoOwoKCS8qKgoJICogYW4gKG9wdGlvbmFsKSBhcnJheSBvZiBjb2xvciB2YWx1ZXMgZm9yIHRoZSBzZXZlcmFsIFFSIG1hdHJpeCBwYXJ0cwoJICovCglwcm90ZWN0ZWQgYXJyYXkgJG1vZHVsZVZhbHVlczsKCgkvKioKCSAqIHRoZSAoZmlsbGVkKSBkYXRhIG1hdHJpeCBvYmplY3QKCSAqLwoJcHJvdGVjdGVkIFFSTWF0cml4ICRtYXRyaXg7CgoJLyoqCgkgKiBAdmFyIFxjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlfFxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMKCSAqLwoJcHJvdGVjdGVkIFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlICRvcHRpb25zOwoKCS8qKgoJICogUVJPdXRwdXRBYnN0cmFjdCBjb25zdHJ1Y3Rvci4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlICRvcHRpb25zLCBRUk1hdHJpeCAkbWF0cml4KXsKCQkkdGhpcy0+b3B0aW9ucyAgICAgPSAkb3B0aW9uczsKCQkkdGhpcy0+bWF0cml4ICAgICAgPSAkbWF0cml4OwoJCSR0aGlzLT5tb2R1bGVDb3VudCA9ICR0aGlzLT5tYXRyaXgtPnNpemUoKTsKCQkkdGhpcy0+c2NhbGUgICAgICAgPSAkdGhpcy0+b3B0aW9ucy0+c2NhbGU7CgkJJHRoaXMtPmxlbmd0aCAgICAgID0gJHRoaXMtPm1vZHVsZUNvdW50ICogJHRoaXMtPnNjYWxlOwoKCQkkY2xhc3MgPSBnZXRfY2FsbGVkX2NsYXNzKCk7CgoJCWlmKGlzc2V0KFFSQ29kZTo6T1VUUFVUX01PREVTWyRjbGFzc10pICYmIGluX2FycmF5KCR0aGlzLT5vcHRpb25zLT5vdXRwdXRUeXBlLCBRUkNvZGU6Ok9VVFBVVF9NT0RFU1skY2xhc3NdKSl7CgkJCSR0aGlzLT5vdXRwdXRNb2RlID0gJHRoaXMtPm9wdGlvbnMtPm91dHB1dFR5cGU7CgkJfQoKCQkkdGhpcy0+c2V0TW9kdWxlVmFsdWVzKCk7Cgl9CgoJLyoqCgkgKiBTZXRzIHRoZSBpbml0aWFsIG1vZHVsZSB2YWx1ZXMgKGNsZWFuLXVwICYgZGVmYXVsdHMpCgkgKi8KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBzZXRNb2R1bGVWYWx1ZXMoKTp2b2lkOwoKCS8qKgoJICogc2F2ZXMgdGhlIHFyIGRhdGEgdG8gYSBmaWxlCgkgKgoJICogQHNlZSBmaWxlX3B1dF9jb250ZW50cygpCgkgKiBAc2VlIFxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnM6OmNhY2hlZmlsZQoJICoKCSAqIEB0aHJvd3MgXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkNvZGVPdXRwdXRFeGNlcHRpb24KCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNhdmVUb0ZpbGUoc3RyaW5nICRkYXRhLCBzdHJpbmcgJGZpbGUpOmJvb2x7CgoJCWlmKCFpc193cml0YWJsZShkaXJuYW1lKCRmaWxlKSkpewoJCQl0aHJvdyBuZXcgUVJDb2RlT3V0cHV0RXhjZXB0aW9uKHNwcmludGYoJ0NvdWxkIG5vdCB3cml0ZSBkYXRhIHRvIGNhY2hlIGZpbGU6ICVzJywgJGZpbGUpKTsKCQl9CgoJCXJldHVybiAoYm9vbClmaWxlX3B1dF9jb250ZW50cygkZmlsZSwgJGRhdGEpOwoJfQoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGR1bXAoc3RyaW5nICRmaWxlID0gbnVsbCl7CgkJJGZpbGUgPz89ICR0aGlzLT5vcHRpb25zLT5jYWNoZWZpbGU7CgoJCS8vIGNhbGwgdGhlIGJ1aWx0LWluIG91dHB1dCBtZXRob2Qgd2l0aCB0aGUgb3B0aW9uYWwgZmlsZSBwYXRoIGFzIHBhcmFtZXRlcgoJCS8vIHRvIG1ha2UgdGhlIGNhbGxlZCBtZXRob2QgYXdhcmUgaWYgYSBjYWNoZSBmaWxlIHdhcyBnaXZlbgoJCSRkYXRhID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAkdGhpcy0+b3V0cHV0TW9kZSA/PyAkdGhpcy0+ZGVmYXVsdE1vZGVdLCBbJGZpbGVdKTsKCgkJaWYoJGZpbGUgIT09IG51bGwpewoJCQkkdGhpcy0+c2F2ZVRvRmlsZSgkZGF0YSwgJGZpbGUpOwoJCX0KCgkJcmV0dXJuICRkYXRhOwoJfQoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjI1OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjU6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJPdXRwdXQiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0IjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTE6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0QWJzdHJhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoiUVJPdXRwdXRBYnN0cmFjdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjI6ImNvbW1vbiBvdXRwdXQgYWJzdHJhY3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MjQ6ImNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dCI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6Mzp7czo4OiJRUk1hdHJpeCI7czozMToiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeCI7czo2OiJRUkNvZGUiO3M6MjQ6ImNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZSI7czoyNjoiU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO3M6NDY6ImNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjE7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YToxOntzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0SW50ZXJmYWNlIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoiUVJPdXRwdXRJbnRlcmZhY2UiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6ODp7czo1NjoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0OjokbW9kdWxlQ291bnQiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTY6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRBYnN0cmFjdDo6JG1vZHVsZUNvdW50IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6Im1vZHVsZUNvdW50Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMzOiJ0aGUgY3VycmVudCBzaXplIG9mIHRoZSBRUiBtYXRyaXgiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbiI6MTp7czo2MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbgBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6c2l6ZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoic2l6ZSI7fX1zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1NToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0Ojokb3V0cHV0TW9kZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1NToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0Ojokb3V0cHV0TW9kZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJvdXRwdXRNb2RlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjIzOiJ0aGUgY3VycmVudCBvdXRwdXQgbW9kZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnM6OiRvdXRwdXRUeXBlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6Im91dHB1dFR5cGUiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9fXM6NTY6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRBYnN0cmFjdDo6JGRlZmF1bHRNb2RlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU2OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0QWJzdHJhY3Q6OiRkZWZhdWx0TW9kZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJkZWZhdWx0TW9kZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1MjoidGhlIGRlZmF1bHQgb3V0cHV0IG1vZGUgb2YgdGhlIGN1cnJlbnQgb3V0cHV0IG1vZHVsZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtOO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX1zOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0QWJzdHJhY3Q6OiRzY2FsZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0Ojokc2NhbGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJzY2FsZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozNDoidGhlIGN1cnJlbnQgc2NhbGluZyBmb3IgYSBRUiBwaXhlbCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzY6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnM6OiRzY2FsZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6InNjYWxlIjt9fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtOO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUxOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0QWJzdHJhY3Q6OiRsZW5ndGgiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRBYnN0cmFjdDo6JGxlbmd0aCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjY6Imxlbmd0aCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0OToidGhlIHNpZGUgbGVuZ3RoIG9mIHRoZSBRUiBpbWFnZSAobW9kdWxlcyAqIHNjYWxlKSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjUxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtOO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjU3OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0QWJzdHJhY3Q6OiRtb2R1bGVWYWx1ZXMiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTc6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRBYnN0cmFjdDo6JG1vZHVsZVZhbHVlcyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJtb2R1bGVWYWx1ZXMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Njc6ImFuIChvcHRpb25hbCkgYXJyYXkgb2YgY29sb3IgdmFsdWVzIGZvciB0aGUgc2V2ZXJhbCBRUiBtYXRyaXggcGFydHMiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fXM6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRBYnN0cmFjdDo6JG1hdHJpeCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0OjokbWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoibWF0cml4Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMxOiJ0aGUgKGZpbGxlZCkgZGF0YSBtYXRyaXggb2JqZWN0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NjE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjY0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJRUk1hdHJpeCI7fX19czo1MjoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0Ojokb3B0aW9ucyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MjoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0Ojokb3B0aW9ucyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6Im9wdGlvbnMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxTZXR0aW5nc1xTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI2OiJTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZSI7fX1pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiUVJPcHRpb25zIjt9fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjY2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtOO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjY6IlNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjt9fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6NDp7czo1NzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0OjpfX2NvbnN0cnVjdCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoyOToiUVJPdXRwdXRBYnN0cmFjdCBjb25zdHJ1Y3Rvci4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1NzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0OjpfX2NvbnN0cnVjdCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6Il9fY29uc3RydWN0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6Im9wdGlvbnMiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NzoiXGNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNjoiU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NjoibWF0cml4IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiUVJNYXRyaXgiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e319czo2MToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0OjpzZXRNb2R1bGVWYWx1ZXMoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTI6IlNldHMgdGhlIGluaXRpYWwgbW9kdWxlIHZhbHVlcyAoY2xlYW4tdXAgJiBkZWZhdWx0cykiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2MToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0OjpzZXRNb2R1bGVWYWx1ZXMoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJzZXRNb2R1bGVWYWx1ZXMiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MTtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjU2OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0QWJzdHJhY3Q6OnNhdmVUb0ZpbGUoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjc6InNhdmVzIHRoZSBxciBkYXRhIHRvIGEgZmlsZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTozOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcZmlsZV9wdXRfY29udGVudHMoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJmaWxlX3B1dF9jb250ZW50cyI7fX1zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbiI6MTp7czo2MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbgBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM5OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zOjpjYWNoZWZpbGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJjYWNoZWZpbGUiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xUaHJvd3MiOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSQ29kZU91dHB1dEV4Y2VwdGlvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIxOiJRUkNvZGVPdXRwdXRFeGNlcHRpb24iO319czo3OiIAKgBuYW1lIjtzOjY6InRocm93cyI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1NjoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0OjpzYXZlVG9GaWxlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoic2F2ZVRvRmlsZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJkYXRhIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImZpbGUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTAzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQm9vbGVhbiI6MDp7fX1zOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0QWJzdHJhY3Q6OmR1bXAoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXREb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0OjpkdW1wKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJkdW1wIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImZpbGUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7czo0OiJudWxsIjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTE1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/4/O/vavAT3oJW06hdfAuzWIQ b/files/4/O/vavAT3oJW06hdfAuzWIQ
deleted file mode 100644
index 50644fd74..000000000
--- a/files/4/O/vavAT3oJW06hdfAuzWIQ
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Ad3b407fc3811ef470d3585d96693e51c-49cfe6cf690a9aa3bd89bb9b3d4d0900
-s:20760:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTQ6IkNsYXNzIEJ5dGVUZXN0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjY6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEyOiJCeXRlVGVzdC5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIyNC4xMS4yMDE3IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyNjoiY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGEiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6NjoiU21pbGV5IjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjIxOiJzbWlsZXlAY2hpbGxlcmxhbi5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IjIwMTcgU21pbGV5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo1O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozOiJNSVQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czowOiIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjA6e319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6IjQ5Y2ZlNmNmNjkwYTlhYTNiZDg5YmI5YjNkNGQwOTAwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWUiO3M6MTI6IkJ5dGVUZXN0LnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjIzOiJ0ZXN0cy9EYXRhL0J5dGVUZXN0LnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6MTIzMDoiPD9waHAKLyoqCiAqIENsYXNzIEJ5dGVUZXN0CiAqCiAqIEBmaWxlc291cmNlICAgQnl0ZVRlc3QucGhwCiAqIEBjcmVhdGVkICAgICAgMjQuMTEuMjAxNwogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhCiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGE7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxCeXRlOwp1c2UgY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2U7CnVzZSBjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnM7CgovKioKICogVGVzdHMgdGhlIEJ5dGUgY2xhc3MKICovCmZpbmFsIGNsYXNzIEJ5dGVUZXN0IGV4dGVuZHMgRGF0YWludGVyZmFjZVRlc3RBYnN0cmFjdHsKCgkvKiogQGludGVybmFsICovCglwcm90ZWN0ZWQgc3RyaW5nICR0ZXN0ZGF0YSA9ICdbwq9cXyjjg4QpXy/Cr10nOwoKCS8qKiBAaW50ZXJuYWwgKi8KCXByb3RlY3RlZCBhcnJheSAgJGV4cGVjdGVkID0gWwoJCTY0LCAyNDUsIDE4OCwgNDIsIDI0NSwgMTk3LCAyNDIsIDE0MiwKCQk1NiwgNTYsIDY2LCAxNDksIDI0MiwgMjUyLCA0MiwgMjQ1LAoJCTIwOCwgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwKCQkxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwKCQkxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJNzksIDg5LCAyMjYsIDQ4LCAyMDksIDg5LCAxNTEsIDEsCgkJMTIsIDczLCA0MiwgMTYzLCAxMSwgMzQsIDI1NSwgMjA1LAoJCTIxLCA0NywgMjUwLCAxMDEKCV07CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICogQGludGVybmFsCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXREYXRhSW50ZXJmYWNlSW5zdGFuY2UoUVJPcHRpb25zICRvcHRpb25zKTpRUkRhdGFJbnRlcmZhY2V7CgkJcmV0dXJuIG5ldyBCeXRlKCRvcHRpb25zKTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyNzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6IkRhdGEiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czozNjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXEJ5dGVUZXN0IjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTE6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcQnl0ZVRlc3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJCeXRlVGVzdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjA6IlRlc3RzIHRoZSBCeXRlIGNsYXNzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjI2OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6Mzp7czo0OiJCeXRlIjtzOjI3OiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEJ5dGUiO3M6MTU6IlFSRGF0YUludGVyZmFjZSI7czozODoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2UiO3M6OToiUVJPcHRpb25zIjtzOjI3OiJjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjE7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUzOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcRGF0YWludGVyZmFjZVRlc3RBYnN0cmFjdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI1OiJEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjI6e3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxCeXRlVGVzdDo6JHRlc3RkYXRhIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcQnl0ZVRlc3Q6OiR0ZXN0ZGF0YSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6InRlc3RkYXRhIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoxODoiJ1vCr1xcXyjjg4QpXy/Cr10nIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e319czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXEJ5dGVUZXN0OjokZXhwZWN0ZWQiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxCeXRlVGVzdDo6JGV4cGVjdGVkIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiZXhwZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQ1MDoiWzY0LCAyNDUsIDE4OCwgNDIsIDI0NSwgMTk3LCAyNDIsIDE0MiwgNTYsIDU2LCA2NiwgMTQ5LCAyNDIsIDI1MiwgNDIsIDI0NSwgMjA4LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDc5LCA4OSwgMjI2LCA0OCwgMjA5LCA4OSwgMTUxLCAxLCAxMiwgNzMsIDQyLCAxNjMsIDExLCAzNCwgMjU1LCAyMDUsIDIxLCA0NywgMjUwLCAxMDFdIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fX1zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0aG9kcyI7YToxOntzOjY0OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcQnl0ZVRlc3Q6OmdldERhdGFJbnRlcmZhY2VJbnN0YW5jZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY0OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcQnl0ZVRlc3Q6OmdldERhdGFJbnRlcmZhY2VJbnN0YW5jZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjQ6ImdldERhdGFJbnRlcmZhY2VJbnN0YW5jZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJvcHRpb25zIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjg6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJRUk9wdGlvbnMiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6IlFSRGF0YUludGVyZmFjZSI7fX19fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9fQ==";
\ No newline at end of file
diff --git a/files/4/Y/ev6+w23CwMcug9nLaXEQ b/files/4/Y/ev6+w23CwMcug9nLaXEQ
deleted file mode 100644
index 3f24afaa3..000000000
--- a/files/4/Y/ev6+w23CwMcug9nLaXEQ
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A2759f30a0c3ac842ba1fbfad5040960d-3c68cd2e1862c8c73dc4f65e8ec9d19a
-s:27304:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTQ6IkNsYXNzIFFSTWFya3VwIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjY6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEyOiJRUk1hcmt1cC5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIxNy4xMi4yMDE2IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyNDoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjY6IlNtaWxleSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoyMToic21pbGV5QGNoaWxsZXJsYW4ubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiIyMDE2IFNtaWxleSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzoiTUlUIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiIzYzY4Y2QyZTE4NjJjOGM3M2RjNGY2NWU4ZWM5ZDE5YSI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjEyOiJRUk1hcmt1cC5waHAiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czoyMzoic3JjL091dHB1dC9RUk1hcmt1cC5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjM2MzI6Ijw/cGhwCi8qKgogKiBDbGFzcyBRUk1hcmt1cAogKgogKiBAZmlsZXNvdXJjZSAgIFFSTWFya3VwLnBocAogKiBAY3JlYXRlZCAgICAgIDE3LjEyLjIwMTYKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE2IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQ7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOwoKdXNlIGZ1bmN0aW9uIGlzX3N0cmluZywgc3ByaW50Ziwgc3RyaXBfdGFncywgdHJpbTsKCi8qKgogKiBDb252ZXJ0cyB0aGUgbWF0cml4IGludG8gbWFya3VwIHR5cGVzOiBIVE1MLCBTVkcsIC4uLgogKi8KY2xhc3MgUVJNYXJrdXAgZXh0ZW5kcyBRUk91dHB1dEFic3RyYWN0ewoKCXByb3RlY3RlZCBzdHJpbmcgJGRlZmF1bHRNb2RlID0gUVJDb2RlOjpPVVRQVVRfTUFSS1VQX1NWRzsKCgkvKioKCSAqIEBzZWUgXHNwcmludGYoKQoJICovCglwcm90ZWN0ZWQgc3RyaW5nICRzdmdIZWFkZXIgPSAnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJxci1zdmcgJTEkcyIgJy4KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHlsZT0id2lkdGg6IDEwMCUlOyBoZWlnaHQ6IGF1dG87IiB2aWV3Qm94PSIwIDAgJTIkZCAlMiRkIj4nOwoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldE1vZHVsZVZhbHVlcygpOnZvaWR7CgoJCWZvcmVhY2goJHRoaXM6OkRFRkFVTFRfTU9EVUxFX1ZBTFVFUyBhcyAkTV9UWVBFID0+ICRkZWZhdWx0VmFsdWUpewoJCQkkdiA9ICR0aGlzLT5vcHRpb25zLT5tb2R1bGVWYWx1ZXNbJE1fVFlQRV0gPz8gbnVsbDsKCgkJCWlmKCFpc19zdHJpbmcoJHYpKXsKCQkJCSR0aGlzLT5tb2R1bGVWYWx1ZXNbJE1fVFlQRV0gPSAkZGVmYXVsdFZhbHVlCgkJCQkJPyAkdGhpcy0+b3B0aW9ucy0+bWFya3VwRGFyawoJCQkJCTogJHRoaXMtPm9wdGlvbnMtPm1hcmt1cExpZ2h0OwoJCQl9CgkJCWVsc2V7CgkJCQkkdGhpcy0+bW9kdWxlVmFsdWVzWyRNX1RZUEVdID0gdHJpbShzdHJpcF90YWdzKCR2KSwgJ1wnIicpOwoJCQl9CgoJCX0KCgl9CgoJLyoqCgkgKiBIVE1MIG91dHB1dAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gaHRtbChzdHJpbmcgJGZpbGUgPSBudWxsKTpzdHJpbmd7CgoJCSRodG1sID0gZW1wdHkoJHRoaXMtPm9wdGlvbnMtPmNzc0NsYXNzKQoJCQk/ICc8ZGl2PicKCQkJOiAnPGRpdiBjbGFzcz0iJy4kdGhpcy0+b3B0aW9ucy0+Y3NzQ2xhc3MuJyI+JzsKCgkJJGh0bWwgLj0gJHRoaXMtPm9wdGlvbnMtPmVvbDsKCgkJZm9yZWFjaCgkdGhpcy0+bWF0cml4LT5tYXRyaXgoKSBhcyAkcm93KXsKCQkJJGh0bWwgLj0gJzxkaXY+JzsKCgkJCWZvcmVhY2goJHJvdyBhcyAkTV9UWVBFKXsKCQkJCSRodG1sIC49ICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogJy4kdGhpcy0+bW9kdWxlVmFsdWVzWyRNX1RZUEVdLic7Ij48L3NwYW4+JzsKCQkJfQoKCQkJJGh0bWwgLj0gJzwvZGl2PicuJHRoaXMtPm9wdGlvbnMtPmVvbDsKCQl9CgoJCSRodG1sIC49ICc8L2Rpdj4nLiR0aGlzLT5vcHRpb25zLT5lb2w7CgoJCWlmKCRmaWxlICE9PSBudWxsKXsKCQkJcmV0dXJuICc8IURPQ1RZUEUgaHRtbD4nLgoJCQkgICAgICAgJzxoZWFkPjxtZXRhIGNoYXJzZXQ9IlVURi04Ij48dGl0bGU+UVIgQ29kZTwvdGl0bGU+PC9oZWFkPicuCgkJCSAgICAgICAnPGJvZHk+Jy4kdGhpcy0+b3B0aW9ucy0+ZW9sLiRodG1sLic8L2JvZHk+JzsKCQl9CgoJCXJldHVybiAkaHRtbDsKCX0KCgkvKioKCSAqIFNWRyBvdXRwdXQKCSAqCgkgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RlbWFzaGVyL3BocC1xcmNvZGUvcHVsbC81CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzdmcoc3RyaW5nICRmaWxlID0gbnVsbCk6c3RyaW5newoJCSRtYXRyaXggPSAkdGhpcy0+bWF0cml4LT5tYXRyaXgoKTsKCgkJJHN2ZyA9IHNwcmludGYoJHRoaXMtPnN2Z0hlYWRlciwgJHRoaXMtPm9wdGlvbnMtPmNzc0NsYXNzLCAkdGhpcy0+b3B0aW9ucy0+c3ZnVmlld0JveFNpemUgPz8gJHRoaXMtPm1vZHVsZUNvdW50KQoJCSAgICAgICAuJHRoaXMtPm9wdGlvbnMtPmVvbAoJCSAgICAgICAuJzxkZWZzPicuJHRoaXMtPm9wdGlvbnMtPnN2Z0RlZnMuJzwvZGVmcz4nCgkJICAgICAgIC4kdGhpcy0+b3B0aW9ucy0+ZW9sOwoKCQlmb3JlYWNoKCR0aGlzLT5tb2R1bGVWYWx1ZXMgYXMgJE1fVFlQRSA9PiAkdmFsdWUpewoJCQkkcGF0aCA9ICcnOwoKCQkJZm9yZWFjaCgkbWF0cml4IGFzICR5ID0+ICRyb3cpewoJCQkJLy93ZSdsbCBjb21iaW5lIGFjdGl2ZSBibG9ja3Mgd2l0aGluIGEgc2luZ2xlIHJvdyBhcyBhIGxpZ2h0d2VpZ2h0IGNvbXByZXNzaW9uIHRlY2huaXF1ZQoJCQkJJHN0YXJ0ID0gbnVsbDsKCQkJCSRjb3VudCA9IDA7CgoJCQkJZm9yZWFjaCgkcm93IGFzICR4ID0+ICRtb2R1bGUpewoKCQkJCQlpZigkbW9kdWxlID09PSAkTV9UWVBFKXsKCQkJCQkJJGNvdW50Kys7CgoJCQkJCQlpZigkc3RhcnQgPT09IG51bGwpewoJCQkJCQkJJHN0YXJ0ID0gJHg7CgkJCQkJCX0KCgkJCQkJCWlmKGlzc2V0KCRyb3dbJHggKyAxXSkpewoJCQkJCQkJY29udGludWU7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCWlmKCRjb3VudCA+IDApewoJCQkJCQkkbGVuICAgPSAkY291bnQ7CgkJCQkJCSRzdGFydCA/Pz0gMDsgLy8gYXZvaWQgdHlwZSBjb2VyY2lvbiBpbiBzcHJpbnRmKCkgLSBwaGFuIGhhcHB5CgoJCQkJCQkkcGF0aCAuPSBzcHJpbnRmKCdNJXMgJXMgaCVzIHYxIGgtJXNaICcsICRzdGFydCwgJHksICRsZW4sICRsZW4pOwoKCQkJCQkJLy8gcmVzZXQgY291bnQKCQkJCQkJJGNvdW50ID0gMDsKCQkJCQkJJHN0YXJ0ID0gbnVsbDsKCQkJCQl9CgoJCQkJfQoKCQkJfQoKCQkJaWYoIWVtcHR5KCRwYXRoKSl7CgkJCQkkc3ZnIC49IHNwcmludGYoCgkJCQkJJzxwYXRoIGNsYXNzPSJxci0lcyAlcyIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0iJXMiIGZpbGwtb3BhY2l0eT0iJXMiIGQ9IiVzIiAvPicsCgkJCQkJJE1fVFlQRSwgJHRoaXMtPm9wdGlvbnMtPmNzc0NsYXNzLCAkdmFsdWUsICR0aGlzLT5vcHRpb25zLT5zdmdPcGFjaXR5LCAkcGF0aAoJCQkJKTsKCQkJfQoKCQl9CgoJCS8vIGNsb3NlIHN2ZwoJCSRzdmcgLj0gJzwvc3ZnPicuJHRoaXMtPm9wdGlvbnMtPmVvbDsKCgkJLy8gaWYgc2F2aW5nIHRvIGZpbGUsIGFwcGVuZCB0aGUgY29ycmVjdCBoZWFkZXJzCgkJaWYoJGZpbGUgIT09IG51bGwpewoJCQlyZXR1cm4gJzwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Jy4KCQkJICAgICAgICR0aGlzLT5vcHRpb25zLT5lb2wuJHN2ZzsKCQl9CgoJCWlmKCR0aGlzLT5vcHRpb25zLT5pbWFnZUJhc2U2NCl7CgkJCSRzdmcgPSBzcHJpbnRmKCdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCVzJywgYmFzZTY0X2VuY29kZSgkc3ZnKSk7CgkJfQoKCQlyZXR1cm4gJHN2ZzsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyNToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI1OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiT3V0cHV0Ijt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6MzQ6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJNYXJrdXAiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzQ6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJNYXJrdXAiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJRUk1hcmt1cCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTE6IkNvbnZlcnRzIHRoZSBtYXRyaXggaW50byBtYXJrdXAgdHlwZXM6IEhUTUwsIFNWRywgLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyOiIuLiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjE6e3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0QWJzdHJhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoiUVJPdXRwdXRBYnN0cmFjdCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YToyOntzOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSTWFya3VwOjokZGVmYXVsdE1vZGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJNYXJrdXA6OiRkZWZhdWx0TW9kZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJkZWZhdWx0TW9kZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtOO3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQ0OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfTUFSS1VQX1NWRyI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9fXM6NDY6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJNYXJrdXA6OiRzdmdIZWFkZXIiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDY6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJNYXJrdXA6OiRzdmdIZWFkZXIiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJzdmdIZWFkZXIiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjU0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4iOjE6e3M6NjE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoxMDoiXHNwcmludGYoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6InNwcmludGYiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6MTI3OiInPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJxci1zdmcgJTEkcyIgJyAuICdzdHlsZT0id2lkdGg6IDEwMCUlOyBoZWlnaHQ6IGF1dG87IiB2aWV3Qm94PSIwIDAgJTIkZCAlMiRkIj4nIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e319fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjM6e3M6NTM6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJNYXJrdXA6OnNldE1vZHVsZVZhbHVlcygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTM6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJNYXJrdXA6OnNldE1vZHVsZVZhbHVlcygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6InNldE1vZHVsZVZhbHVlcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJNYXJrdXA6Omh0bWwoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTE6IkhUTUwgb3V0cHV0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJNYXJrdXA6Omh0bWwoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6Imh0bWwiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoiZmlsZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtzOjQ6Im51bGwiO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e319czo0MToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk1hcmt1cDo6c3ZnKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjEwOiJTVkcgb3V0cHV0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjUyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsIjoxOntzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybAB1cmkiO3M6NDc6Imh0dHBzOi8vZ2l0aHViLmNvbS9jb2RlbWFzaGVyL3BocC1xcmNvZGUvcHVsbC81Ijt9czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6ODU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJNYXJrdXA6OnN2ZygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6Mzoic3ZnIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImZpbGUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7czo0OiJudWxsIjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/7/N/+uZ9S-KVpLiPSlf8W0jw b/files/7/N/+uZ9S-KVpLiPSlf8W0jw
deleted file mode 100644
index fde1add52..000000000
--- a/files/7/N/+uZ9S-KVpLiPSlf8W0jw
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Ab424b588535732c9c0ee9c87d872cd3e-ad326a54ffcac51ccc36e8c29c0d24fc
-s:138836:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTI6IkNsYXNzIFFSQ29kZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiUVJDb2RlLnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjI2LjExLjIwMTUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE3OiJjaGlsbGVybGFuXFFSQ29kZSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNSBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiYWQzMjZhNTRmZmNhYzUxY2NjMzZlOGMyOWMwZDI0ZmMiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxMDoiUVJDb2RlLnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjE0OiJzcmMvUVJDb2RlLnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6NzgxNzoiPD9waHAKLyoqCiAqIENsYXNzIFFSQ29kZQogKgogKiBAZmlsZXNvdXJjZSAgIFFSQ29kZS5waHAKICogQGNyZWF0ZWQgICAgICAyNi4xMS4yMDE1CiAqIEBwYWNrYWdlICAgICAgY2hpbGxlcmxhblxRUkNvZGUKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZTsKCnVzZSBjaGlsbGVybGFuXFFSQ29kZVxEYXRhXHsKCUFscGhhTnVtLCBCeXRlLCBLYW5qaSwgTWFza1BhdHRlcm5UZXN0ZXIsIE51bWJlciwgUVJDb2RlRGF0YUV4Y2VwdGlvbiwgUVJEYXRhSW50ZXJmYWNlLCBRUk1hdHJpeAp9Owp1c2UgY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XHsKCVFSQ29kZU91dHB1dEV4Y2VwdGlvbiwgUVJGcGRmLCBRUkltYWdlLCBRUkltYWdpY2ssIFFSTWFya3VwLCBRUk91dHB1dEludGVyZmFjZSwgUVJTdHJpbmcKfTsKdXNlIGNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gY2FsbF91c2VyX2Z1bmNfYXJyYXksIGNsYXNzX2V4aXN0cywgaW5fYXJyYXksIG9yZCwgc3RybGVuLCBzdHJ0b2xvd2VyLCBzdHJfc3BsaXQ7CgovKioKICogVHVybnMgYSB0ZXh0IHN0cmluZyBpbnRvIGEgTW9kZWwgMiBRUiBDb2RlCiAqCiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2thenVoaWtvYXJhc2UvcXJjb2RlLWdlbmVyYXRvci90cmVlL21hc3Rlci9waHAKICogQHNlZSBodHRwOi8vd3d3LnFyY29kZS5jb20vZW4vY29kZXMvbW9kZWwxMi5odG1sCiAqIEBzZWUgaHR0cHM6Ly93d3cuc3dpc3NlZHVjLmNoL2luZm9ybWF0aWsvdGhlb3JldGlzY2hlX2luZm9ybWF0aWsvcXJfY29kZXMvZG9jcy9xcl9zdGFuZGFyZC5wZGYKICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RUl9jb2RlCiAqIEBzZWUgaHR0cDovL3d3dy50aG9ua3kuY29tL3FyLWNvZGUtdHV0b3JpYWwvCiAqLwpjbGFzcyBRUkNvZGV7CgoJLyoqIEB2YXIgaW50ICovCglwdWJsaWMgY29uc3QgVkVSU0lPTl9BVVRPICAgICAgID0gLTE7CgkvKiogQHZhciBpbnQgKi8KCXB1YmxpYyBjb25zdCBNQVNLX1BBVFRFUk5fQVVUTyAgPSAtMTsKCgkvLyBJU08vSUVDIDE4MDA0OjIwMDAgVGFibGUgMgoKCS8qKiBAdmFyIGludCAqLwoJcHVibGljIGNvbnN0IERBVEFfTlVNQkVSICAgPSAwYjAwMDE7CgkvKiogQHZhciBpbnQgKi8KCXB1YmxpYyBjb25zdCBEQVRBX0FMUEhBTlVNID0gMGIwMDEwOwoJLyoqIEB2YXIgaW50ICovCglwdWJsaWMgY29uc3QgREFUQV9CWVRFICAgICA9IDBiMDEwMDsKCS8qKiBAdmFyIGludCAqLwoJcHVibGljIGNvbnN0IERBVEFfS0FOSkkgICAgPSAwYjEwMDA7CgoJLyoqCgkgKiBSZWZlcmVuY2VzIHRvIHRoZSBrZXlzIG9mIHRoZSBmb2xsb3dpbmcgdGFibGVzOgoJICoKCSAqIEBzZWUgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlOjpNQVhfTEVOR1RICgkgKgoJICogQHZhciBpbnRbXQoJICovCglwdWJsaWMgY29uc3QgREFUQV9NT0RFUyA9IFsKCQlzZWxmOjpEQVRBX05VTUJFUiAgID0+IDAsCgkJc2VsZjo6REFUQV9BTFBIQU5VTSA9PiAxLAoJCXNlbGY6OkRBVEFfQllURSAgICAgPT4gMiwKCQlzZWxmOjpEQVRBX0tBTkpJICAgID0+IDMsCgldOwoKCS8vIElTTy9JRUMgMTgwMDQ6MjAwMCBUYWJsZXMgMTIsIDI1CgoJLyoqIEB2YXIgaW50ICovCglwdWJsaWMgY29uc3QgRUNDX0wgPSAwYjAxOyAvLyA3JS4KCS8qKiBAdmFyIGludCAqLwoJcHVibGljIGNvbnN0IEVDQ19NID0gMGIwMDsgLy8gMTUlLgoJLyoqIEB2YXIgaW50ICovCglwdWJsaWMgY29uc3QgRUNDX1EgPSAwYjExOyAvLyAyNSUuCgkvKiogQHZhciBpbnQgKi8KCXB1YmxpYyBjb25zdCBFQ0NfSCA9IDBiMTA7IC8vIDMwJS4KCgkvKioKCSAqIFJlZmVyZW5jZXMgdG8gdGhlIGtleXMgb2YgdGhlIGZvbGxvd2luZyB0YWJsZXM6CgkgKgoJICogQHNlZSBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2U6Ok1BWF9CSVRTCgkgKiBAc2VlIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZTo6UlNCTE9DS1MKCSAqIEBzZWUgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OmZvcm1hdFBhdHRlcm4KCSAqCgkgKiBAdmFyIGludFtdCgkgKi8KCXB1YmxpYyBjb25zdCBFQ0NfTU9ERVMgPSBbCgkJc2VsZjo6RUNDX0wgPT4gMCwKCQlzZWxmOjpFQ0NfTSA9PiAxLAoJCXNlbGY6OkVDQ19RID0+IDIsCgkJc2VsZjo6RUNDX0ggPT4gMywKCV07CgoJLyoqIEB2YXIgc3RyaW5nICovCglwdWJsaWMgY29uc3QgT1VUUFVUX01BUktVUF9IVE1MID0gJ2h0bWwnOwoJLyoqIEB2YXIgc3RyaW5nICovCglwdWJsaWMgY29uc3QgT1VUUFVUX01BUktVUF9TVkcgID0gJ3N2Zyc7CgkvKiogQHZhciBzdHJpbmcgKi8KCXB1YmxpYyBjb25zdCBPVVRQVVRfSU1BR0VfUE5HICAgPSAncG5nJzsKCS8qKiBAdmFyIHN0cmluZyAqLwoJcHVibGljIGNvbnN0IE9VVFBVVF9JTUFHRV9KUEcgICA9ICdqcGcnOwoJLyoqIEB2YXIgc3RyaW5nICovCglwdWJsaWMgY29uc3QgT1VUUFVUX0lNQUdFX0dJRiAgID0gJ2dpZic7CgkvKiogQHZhciBzdHJpbmcgKi8KCXB1YmxpYyBjb25zdCBPVVRQVVRfU1RSSU5HX0pTT04gPSAnanNvbic7CgkvKiogQHZhciBzdHJpbmcgKi8KCXB1YmxpYyBjb25zdCBPVVRQVVRfU1RSSU5HX1RFWFQgPSAndGV4dCc7CgkvKiogQHZhciBzdHJpbmcgKi8KCXB1YmxpYyBjb25zdCBPVVRQVVRfSU1BR0lDSyAgICAgPSAnaW1hZ2ljayc7CgkvKiogQHZhciBzdHJpbmcgKi8KCXB1YmxpYyBjb25zdCBPVVRQVVRfRlBERiAgICAgICAgPSAnZnBkZic7CgkvKiogQHZhciBzdHJpbmcgKi8KCXB1YmxpYyBjb25zdCBPVVRQVVRfQ1VTVE9NICAgICAgPSAnY3VzdG9tJzsKCgkvKioKCSAqIE1hcCBvZiBidWlsdC1pbiBvdXRwdXQgbW9kdWxlcyA9PiBjYXBhYmlsaXRpZXMKCSAqCgkgKiBAdmFyIHN0cmluZ1tdW10KCSAqLwoJcHVibGljIGNvbnN0IE9VVFBVVF9NT0RFUyA9IFsKCQlRUk1hcmt1cDo6Y2xhc3MgPT4gWwoJCQlzZWxmOjpPVVRQVVRfTUFSS1VQX1NWRywKCQkJc2VsZjo6T1VUUFVUX01BUktVUF9IVE1MLAoJCV0sCgkJUVJJbWFnZTo6Y2xhc3MgPT4gWwoJCQlzZWxmOjpPVVRQVVRfSU1BR0VfUE5HLAoJCQlzZWxmOjpPVVRQVVRfSU1BR0VfR0lGLAoJCQlzZWxmOjpPVVRQVVRfSU1BR0VfSlBHLAoJCV0sCgkJUVJTdHJpbmc6OmNsYXNzID0+IFsKCQkJc2VsZjo6T1VUUFVUX1NUUklOR19KU09OLAoJCQlzZWxmOjpPVVRQVVRfU1RSSU5HX1RFWFQsCgkJXSwKCQlRUkltYWdpY2s6OmNsYXNzID0+IFsKCQkJc2VsZjo6T1VUUFVUX0lNQUdJQ0ssCgkJXSwKCQlRUkZwZGY6OmNsYXNzID0+IFsKCQkJc2VsZjo6T1VUUFVUX0ZQREYKCQldCgldOwoKCS8qKgoJICogTWFwIG9mIGRhdGEgbW9kZSA9PiBpbnRlcmZhY2UKCSAqCgkgKiBAdmFyIHN0cmluZ1tdCgkgKi8KCXByb3RlY3RlZCBjb25zdCBEQVRBX0lOVEVSRkFDRVMgPSBbCgkJJ251bWJlcicgICA9PiBOdW1iZXI6OmNsYXNzLAoJCSdhbHBoYW51bScgPT4gQWxwaGFOdW06OmNsYXNzLAoJCSdrYW5qaScgICAgPT4gS2Fuamk6OmNsYXNzLAoJCSdieXRlJyAgICAgPT4gQnl0ZTo6Y2xhc3MsCgldOwoKCS8qKgoJICogVGhlIHNldHRpbmdzIGNvbnRhaW5lcgoJICoKCSAqIEB2YXIgXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc3xcY2hpbGxlcmxhblxTZXR0aW5nc1xTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZQoJICovCglwcm90ZWN0ZWQgU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UgJG9wdGlvbnM7CgoJLyoqCgkgKiBUaGUgc2VsZWN0ZWQgZGF0YSBpbnRlcmZhY2UgKE51bWJlciwgQWxwaGFOdW0sIEthbmppLCBCeXRlKQoJICovCglwcm90ZWN0ZWQgUVJEYXRhSW50ZXJmYWNlICRkYXRhSW50ZXJmYWNlOwoKCS8qKgoJICogUVJDb2RlIGNvbnN0cnVjdG9yLgoJICoKCSAqIFNldHMgdGhlIG9wdGlvbnMgaW5zdGFuY2UsIGRldGVybWluZXMgdGhlIGN1cnJlbnQgbWItZW5jb2RpbmcgYW5kIHNldHMgaXQgdG8gVVRGLTgKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlICRvcHRpb25zID0gbnVsbCl7CgkJJHRoaXMtPm9wdGlvbnMgPSAkb3B0aW9ucyA/PyBuZXcgUVJPcHRpb25zOwoJfQoKCS8qKgoJICogUmVuZGVycyBhIFFSIENvZGUgZm9yIHRoZSBnaXZlbiAkZGF0YSBhbmQgUVJPcHRpb25zCgkgKgoJICogQHJldHVybiBtaXhlZAoJICovCglwdWJsaWMgZnVuY3Rpb24gcmVuZGVyKHN0cmluZyAkZGF0YSwgc3RyaW5nICRmaWxlID0gbnVsbCl7CgkJcmV0dXJuICR0aGlzLT5pbml0T3V0cHV0SW50ZXJmYWNlKCRkYXRhKS0+ZHVtcCgkZmlsZSk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGEgUVJNYXRyaXggb2JqZWN0IGZvciB0aGUgZ2l2ZW4gJGRhdGEgYW5kIGN1cnJlbnQgUVJPcHRpb25zCgkgKgoJICogQHRocm93cyBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkNvZGVEYXRhRXhjZXB0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRNYXRyaXgoc3RyaW5nICRkYXRhKTpRUk1hdHJpeHsKCgkJaWYoZW1wdHkoJGRhdGEpKXsKCQkJdGhyb3cgbmV3IFFSQ29kZURhdGFFeGNlcHRpb24oJ1FSQ29kZTo6Z2V0TWF0cml4KCkgTm8gZGF0YSBnaXZlbi4nKTsKCQl9CgoJCSR0aGlzLT5kYXRhSW50ZXJmYWNlID0gJHRoaXMtPmluaXREYXRhSW50ZXJmYWNlKCRkYXRhKTsKCgkJJG1hc2tQYXR0ZXJuID0gJHRoaXMtPm9wdGlvbnMtPm1hc2tQYXR0ZXJuID09PSAkdGhpczo6TUFTS19QQVRURVJOX0FVVE8KCQkJPyAobmV3IE1hc2tQYXR0ZXJuVGVzdGVyKCR0aGlzLT5kYXRhSW50ZXJmYWNlKSktPmdldEJlc3RNYXNrUGF0dGVybigpCgkJCTogJHRoaXMtPm9wdGlvbnMtPm1hc2tQYXR0ZXJuOwoKCQkkbWF0cml4ID0gJHRoaXMtPmRhdGFJbnRlcmZhY2UtPmluaXRNYXRyaXgoJG1hc2tQYXR0ZXJuKTsKCgkJaWYoKGJvb2wpJHRoaXMtPm9wdGlvbnMtPmFkZFF1aWV0em9uZSl7CgkJCSRtYXRyaXgtPnNldFF1aWV0Wm9uZSgkdGhpcy0+b3B0aW9ucy0+cXVpZXR6b25lU2l6ZSk7CgkJfQoKCQlyZXR1cm4gJG1hdHJpeDsKCX0KCgkvKioKCSAqIHJldHVybnMgYSBmcmVzaCBRUkRhdGFJbnRlcmZhY2UgZm9yIHRoZSBnaXZlbiAkZGF0YQoJICoKCSAqIEB0aHJvd3MgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJDb2RlRGF0YUV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gaW5pdERhdGFJbnRlcmZhY2Uoc3RyaW5nICRkYXRhKTpRUkRhdGFJbnRlcmZhY2V7CgoJCS8vIGFsbG93IGZvcmNpbmcgdGhlIGRhdGEgbW9kZQoJCS8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hpbGxlcmxhbi9waHAtcXJjb2RlL2lzc3Vlcy8zOQoJCSRpbnRlcmZhY2UgPSAkdGhpczo6REFUQV9JTlRFUkZBQ0VTW3N0cnRvbG93ZXIoJHRoaXMtPm9wdGlvbnMtPmRhdGFNb2RlT3ZlcnJpZGUpXSA/PyBudWxsOwoKCQlpZigkaW50ZXJmYWNlICE9PSBudWxsKXsKCQkJcmV0dXJuIG5ldyAkaW50ZXJmYWNlKCR0aGlzLT5vcHRpb25zLCAkZGF0YSk7CgkJfQoKCQlmb3JlYWNoKCR0aGlzOjpEQVRBX0lOVEVSRkFDRVMgYXMgJG1vZGUgPT4gJGRhdGFJbnRlcmZhY2UpewoKCQkJaWYoY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAnaXMnLiRtb2RlXSwgWyRkYXRhXSkpewoJCQkJcmV0dXJuIG5ldyAkZGF0YUludGVyZmFjZSgkdGhpcy0+b3B0aW9ucywgJGRhdGEpOwoJCQl9CgoJCX0KCgkJdGhyb3cgbmV3IFFSQ29kZURhdGFFeGNlcHRpb24oJ2ludmFsaWQgZGF0YSB0eXBlJyk7IC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmUKCX0KCgkvKioKCSAqIHJldHVybnMgYSBmcmVzaCAoYnVpbHQtaW4pIFFST3V0cHV0SW50ZXJmYWNlCgkgKgoJICogQHRocm93cyBcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSQ29kZU91dHB1dEV4Y2VwdGlvbgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdE91dHB1dEludGVyZmFjZShzdHJpbmcgJGRhdGEpOlFST3V0cHV0SW50ZXJmYWNlewoKCQlpZigkdGhpcy0+b3B0aW9ucy0+b3V0cHV0VHlwZSA9PT0gJHRoaXM6Ok9VVFBVVF9DVVNUT00gJiYgY2xhc3NfZXhpc3RzKCR0aGlzLT5vcHRpb25zLT5vdXRwdXRJbnRlcmZhY2UpKXsKCQkJLyoqIEBwaGFuLXN1cHByZXNzLW5leHQtbGluZSBQaGFuVHlwZUV4cGVjdGVkT2JqZWN0T3JDbGFzc05hbWUgKi8KCQkJcmV0dXJuIG5ldyAkdGhpcy0+b3B0aW9ucy0+b3V0cHV0SW50ZXJmYWNlKCR0aGlzLT5vcHRpb25zLCAkdGhpcy0+Z2V0TWF0cml4KCRkYXRhKSk7CgkJfQoKCQlmb3JlYWNoKCR0aGlzOjpPVVRQVVRfTU9ERVMgYXMgJG91dHB1dEludGVyZmFjZSA9PiAkbW9kZXMpewoKCQkJaWYoaW5fYXJyYXkoJHRoaXMtPm9wdGlvbnMtPm91dHB1dFR5cGUsICRtb2RlcywgdHJ1ZSkgJiYgY2xhc3NfZXhpc3RzKCRvdXRwdXRJbnRlcmZhY2UpKXsKCQkJCXJldHVybiBuZXcgJG91dHB1dEludGVyZmFjZSgkdGhpcy0+b3B0aW9ucywgJHRoaXMtPmdldE1hdHJpeCgkZGF0YSkpOwoJCQl9CgoJCX0KCgkJdGhyb3cgbmV3IFFSQ29kZU91dHB1dEV4Y2VwdGlvbignaW52YWxpZCBvdXRwdXQgdHlwZScpOwoJfQoKCS8qKgoJICogY2hlY2tzIGlmIGEgc3RyaW5nIHF1YWxpZmllcyBhcyBudW1lcmljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpc051bWJlcihzdHJpbmcgJHN0cmluZyk6Ym9vbHsKCQlyZXR1cm4gJHRoaXMtPmNoZWNrU3RyaW5nKCRzdHJpbmcsIFFSRGF0YUludGVyZmFjZTo6Q0hBUl9NQVBfTlVNQkVSKTsKCX0KCgkvKioKCSAqIGNoZWNrcyBpZiBhIHN0cmluZyBxdWFsaWZpZXMgYXMgYWxwaGFudW1lcmljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpc0FscGhhTnVtKHN0cmluZyAkc3RyaW5nKTpib29sewoJCXJldHVybiAkdGhpcy0+Y2hlY2tTdHJpbmcoJHN0cmluZywgUVJEYXRhSW50ZXJmYWNlOjpDSEFSX01BUF9BTFBIQU5VTSk7Cgl9CgoJLyoqCgkgKiBjaGVja3MgaXMgYSBnaXZlbiAkc3RyaW5nIG1hdGNoZXMgdGhlIGNoYXJhY3RlcnMgb2YgYSBnaXZlbiAkY2hhcm1hcCwgcmV0dXJucyBmYWxzZSBvbiB0aGUgZmlyc3QgaW52YWxpZCBvY2N1cmVuY2UuCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBjaGVja1N0cmluZyhzdHJpbmcgJHN0cmluZywgYXJyYXkgJGNoYXJtYXApOmJvb2x7CgoJCWZvcmVhY2goc3RyX3NwbGl0KCRzdHJpbmcpIGFzICRjaHIpewoJCQlpZighaXNzZXQoJGNoYXJtYXBbJGNocl0pKXsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCgkJcmV0dXJuIHRydWU7Cgl9CgoJLyoqCgkgKiBjaGVja3MgaWYgYSBzdHJpbmcgcXVhbGlmaWVzIGFzIEthbmppCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpc0thbmppKHN0cmluZyAkc3RyaW5nKTpib29sewoJCSRpICAgPSAwOwoJCSRsZW4gPSBzdHJsZW4oJHN0cmluZyk7CgoJCXdoaWxlKCRpICsgMSA8ICRsZW4pewoJCQkkYyA9ICgoMHhmZiAmIG9yZCgkc3RyaW5nWyRpXSkpIDw8IDgpIHwgKDB4ZmYgJiBvcmQoJHN0cmluZ1skaSArIDFdKSk7CgoJCQlpZighKCRjID49IDB4ODE0MCAmJiAkYyA8PSAweDlGRkMpICYmICEoJGMgPj0gMHhFMDQwICYmICRjIDw9IDB4RUJCRikpewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgoJCQkkaSArPSAyOwoJCX0KCgkJcmV0dXJuICRpID49ICRsZW47Cgl9CgoJLyoqCgkgKiBhIGR1bW15CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpc0J5dGUoc3RyaW5nICRkYXRhKTpib29sewoJCXJldHVybiAhZW1wdHkoJGRhdGEpOwoJfQoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjE4OiJcY2hpbGxlcmxhblxRUkNvZGUiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoxODoiXGNoaWxsZXJsYW5cUVJDb2RlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiUVJDb2RlIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6MjU6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjU6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJRUkNvZGUiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQyOiJUdXJucyBhIHRleHQgc3RyaW5nIGludG8gYSBNb2RlbCAyIFFSIENvZGUiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6NTp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwiOjE6e3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsAHVyaSI7czo2NToiaHR0cHM6Ly9naXRodWIuY29tL2thenVoaWtvYXJhc2UvcXJjb2RlLWdlbmVyYXRvci90cmVlL21hc3Rlci9waHAiO31zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwiOjE6e3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsAHVyaSI7czo0MzoiaHR0cDovL3d3dy5xcmNvZGUuY29tL2VuL2NvZGVzL21vZGVsMTIuaHRtbCI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjI7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybCI6MTp7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwAdXJpIjtzOjg5OiJodHRwczovL3d3dy5zd2lzc2VkdWMuY2gvaW5mb3JtYXRpay90aGVvcmV0aXNjaGVfaW5mb3JtYXRpay9xcl9jb2Rlcy9kb2NzL3FyX3N0YW5kYXJkLnBkZiI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjM7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybCI6MTp7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwAdXJpIjtzOjM3OiJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RUl9jb2RlIjt9czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjUyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsIjoxOntzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybAB1cmkiO3M6Mzk6Imh0dHA6Ly93d3cudGhvbmt5LmNvbS9xci1jb2RlLXR1dG9yaWFsLyI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoxNzoiY2hpbGxlcmxhblxRUkNvZGUiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjE2OntzOjg6IkFscGhhTnVtIjtzOjMxOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEFscGhhTnVtIjtzOjQ6IkJ5dGUiO3M6Mjc6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcQnl0ZSI7czo1OiJLYW5qaSI7czoyODoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxLYW5qaSI7czoxNzoiTWFza1BhdHRlcm5UZXN0ZXIiO3M6NDA6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTWFza1BhdHRlcm5UZXN0ZXIiO3M6NjoiTnVtYmVyIjtzOjI5OiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE51bWJlciI7czoxOToiUVJDb2RlRGF0YUV4Y2VwdGlvbiI7czo0MjoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkNvZGVEYXRhRXhjZXB0aW9uIjtzOjE1OiJRUkRhdGFJbnRlcmZhY2UiO3M6Mzg6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlIjtzOjg6IlFSTWF0cml4IjtzOjMxOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjIxOiJRUkNvZGVPdXRwdXRFeGNlcHRpb24iO3M6NDY6ImNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkNvZGVPdXRwdXRFeGNlcHRpb24iO3M6NjoiUVJGcGRmIjtzOjMxOiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJGcGRmIjtzOjc6IlFSSW1hZ2UiO3M6MzI6ImNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlIjtzOjk6IlFSSW1hZ2ljayI7czozNDoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2ljayI7czo4OiJRUk1hcmt1cCI7czozMzoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSTWFya3VwIjtzOjE3OiJRUk91dHB1dEludGVyZmFjZSI7czo0MjoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0SW50ZXJmYWNlIjtzOjg6IlFSU3RyaW5nIjtzOjMzOiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJTdHJpbmciO3M6MjY6IlNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjtzOjQ2OiJjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO047czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MjQ6e3M6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OlZFUlNJT05fQVVUTyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6VkVSU0lPTl9BVVRPIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTI6IlZFUlNJT05fQVVUTyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjI6Ii0xIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mzc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6NDQ6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6Ok1BU0tfUEFUVEVSTl9BVVRPIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ0OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpNQVNLX1BBVFRFUk5fQVVUTyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJNQVNLX1BBVFRFUk5fQVVUTyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjI6Ii0xIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mzk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6Mzg6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OkRBVEFfTlVNQkVSIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpEQVRBX05VTUJFUiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJEQVRBX05VTUJFUiI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjM6IjBiMSI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpEQVRBX0FMUEhBTlVNIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpEQVRBX0FMUEhBTlVNIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6IkRBVEFfQUxQSEFOVU0iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czo0OiIwYjEwIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6MzY6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OkRBVEFfQllURSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNjoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6REFUQV9CWVRFIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiREFUQV9CWVRFIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6OTM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6NToiMGIxMDAiO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0ODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO319czozNzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6REFUQV9LQU5KSSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6REFUQV9LQU5KSSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJEQVRBX0tBTkpJIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6OTM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6NjoiMGIxMDAwIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6Mzc6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OkRBVEFfTU9ERVMiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzc6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OkRBVEFfTU9ERVMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoiREFUQV9NT0RFUyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0NzoiUmVmZXJlbmNlcyB0byB0aGUga2V5cyBvZiB0aGUgZm9sbG93aW5nIHRhYmxlczoiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbiI6MTp7czo2MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbgBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUxOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2U6Ok1BWF9MRU5HVEgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoiTUFYX0xFTkdUSCI7fX1zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6OTM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6OTU6IltzZWxmOjpEQVRBX05VTUJFUiA9PiAwLCBzZWxmOjpEQVRBX0FMUEhBTlVNID0+IDEsIHNlbGY6OkRBVEFfQllURSA9PiAyLCBzZWxmOjpEQVRBX0tBTkpJID0+IDNdIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OkVDQ19MIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpFQ0NfTCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6IkVDQ19MIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6OTM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Njg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6MzoiMGIxIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Njk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OkVDQ19NIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpFQ0NfTSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6IkVDQ19NIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6OTM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6MzoiMGIwIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OkVDQ19RIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpFQ0NfUSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6IkVDQ19RIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6OTM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6NDoiMGIxMSI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjczO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpFQ0NfSCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6RUNDX0giO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJFQ0NfSCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjc0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjQ6IjBiMTAiO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO319czozNjoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6RUNDX01PREVTIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpFQ0NfTU9ERVMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJFQ0NfTU9ERVMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NDc6IlJlZmVyZW5jZXMgdG8gdGhlIGtleXMgb2YgdGhlIGZvbGxvd2luZyB0YWJsZXM6IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjQ6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjU0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4iOjE6e3M6NjE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlOjpNQVhfQklUUyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6Ik1BWF9CSVRTIjt9fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZTo6UlNCTE9DS1MiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJSU0JMT0NLUyI7fX1zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToyO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbiI6MTp7czo2MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbgBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6Zm9ybWF0UGF0dGVybiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEzOiJmb3JtYXRQYXR0ZXJuIjt9fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjM7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3NztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czo3MjoiW3NlbGY6OkVDQ19MID0+IDAsIHNlbGY6OkVDQ19NID0+IDEsIHNlbGY6OkVDQ19RID0+IDIsIHNlbGY6OkVDQ19IID0+IDNdIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6ODY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6Ok9VVFBVVF9NQVJLVVBfSFRNTCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6T1VUUFVUX01BUktVUF9IVE1MIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTg6Ik9VVFBVVF9NQVJLVVBfSFRNTCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjkzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjY6IidodG1sJyI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjk0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQ0OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfTUFSS1VQX1NWRyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NDoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6T1VUUFVUX01BUktVUF9TVkciO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoiT1VUUFVUX01BUktVUF9TVkciO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czo1OiInc3ZnJyI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjk2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfSU1BR0VfUE5HIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfSU1BR0VfUE5HIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTY6Ik9VVFBVVF9JTUFHRV9QTkciO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5NztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czo1OiIncG5nJyI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjk4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfSU1BR0VfSlBHIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfSU1BR0VfSlBHIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTY6Ik9VVFBVVF9JTUFHRV9KUEciO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czo1OiInanBnJyI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEwMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO319czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6T1VUUFVUX0lNQUdFX0dJRiI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6T1VUUFVUX0lNQUdFX0dJRiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE2OiJPVVRQVVRfSU1BR0VfR0lGIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6OTM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTAxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjU6IidnaWYnIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTAyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfU1RSSU5HX0pTT04iO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6Ok9VVFBVVF9TVFJJTkdfSlNPTiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE4OiJPVVRQVVRfU1RSSU5HX0pTT04iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6NjoiJ2pzb24nIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTA0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfU1RSSU5HX1RFWFQiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6Ok9VVFBVVF9TVFJJTkdfVEVYVCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE4OiJPVVRQVVRfU1RSSU5HX1RFWFQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6NjoiJ3RleHQnIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTA2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQxOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfSU1BR0lDSyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MToiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6T1VUUFVUX0lNQUdJQ0siO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNDoiT1VUUFVUX0lNQUdJQ0siO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6OToiJ2ltYWdpY2snIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTA4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjM4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfRlBERiI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozODoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6T1VUUFVUX0ZQREYiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToiT1VUUFVUX0ZQREYiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6NjoiJ2ZwZGYnIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTEwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfQ1VTVE9NIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfQ1VTVE9NIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6Ik9VVFBVVF9DVVNUT00iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMTE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6ODoiJ2N1c3RvbSciO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMTI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6Ok9VVFBVVF9NT0RFUyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6T1VUUFVUX01PREVTIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTI6Ik9VVFBVVF9NT0RFUyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0NjoiTWFwIG9mIGJ1aWx0LWluIG91dHB1dCBtb2R1bGVzID0+IGNhcGFiaWxpdGllcyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czo0NDk6IltcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSTWFya3VwOjpjbGFzcyA9PiBbc2VsZjo6T1VUUFVUX01BUktVUF9TVkcsIHNlbGY6Ok9VVFBVVF9NQVJLVVBfSFRNTF0sIFxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnZTo6Y2xhc3MgPT4gW3NlbGY6Ok9VVFBVVF9JTUFHRV9QTkcsIHNlbGY6Ok9VVFBVVF9JTUFHRV9HSUYsIHNlbGY6Ok9VVFBVVF9JTUFHRV9KUEddLCBcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSU3RyaW5nOjpjbGFzcyA9PiBbc2VsZjo6T1VUUFVUX1NUUklOR19KU09OLCBzZWxmOjpPVVRQVVRfU1RSSU5HX1RFWFRdLCBcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2ljazo6Y2xhc3MgPT4gW3NlbGY6Ok9VVFBVVF9JTUFHSUNLXSwgXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkZwZGY6OmNsYXNzID0+IFtzZWxmOjpPVVRQVVRfRlBERl1dIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTE5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpEQVRBX0lOVEVSRkFDRVMiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OkRBVEFfSU5URVJGQUNFUyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJEQVRBX0lOVEVSRkFDRVMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjk6Ik1hcCBvZiBkYXRhIG1vZGUgPT4gaW50ZXJmYWNlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE0MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czoyMDI6IlsnbnVtYmVyJyA9PiBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxOdW1iZXI6OmNsYXNzLCAnYWxwaGFudW0nID0+IFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEFscGhhTnVtOjpjbGFzcywgJ2thbmppJyA9PiBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxLYW5qaTo6Y2xhc3MsICdieXRlJyA9PiBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxCeXRlOjpjbGFzc10iO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNDY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YToyOntzOjM1OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjokb3B0aW9ucyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNToiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6JG9wdGlvbnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJvcHRpb25zIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjIyOiJUaGUgc2V0dGluZ3MgY29udGFpbmVyIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiUVJPcHRpb25zIjt9fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjY6IlNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjt9fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE1MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTU4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NzoiXGNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNjoiU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO319fXM6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OiRkYXRhSW50ZXJmYWNlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQxOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjokZGF0YUludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEzOiJkYXRhSW50ZXJmYWNlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjU5OiJUaGUgc2VsZWN0ZWQgZGF0YSBpbnRlcmZhY2UgKE51bWJlciwgQWxwaGFOdW0sIEthbmppLCBCeXRlKSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE2MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTYzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6IlFSRGF0YUludGVyZmFjZSI7fX19fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjEwOntzOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpfX2NvbnN0cnVjdCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxOToiUVJDb2RlIGNvbnN0cnVjdG9yLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo4MjoiU2V0cyB0aGUgb3B0aW9ucyBpbnN0YW5jZSwgZGV0ZXJtaW5lcyB0aGUgY3VycmVudCBtYi1lbmNvZGluZyBhbmQgc2V0cyBpdCB0byBVVEYtOCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6OTM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTY1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpfX2NvbnN0cnVjdCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6Il9fY29uc3RydWN0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6Im9wdGlvbnMiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NzoiXGNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNjoiU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7czo0OiJudWxsIjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTcwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9fXM6MzU6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OnJlbmRlcigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1MToiUmVuZGVycyBhIFFSIENvZGUgZm9yIHRoZSBnaXZlbiAkZGF0YSBhbmQgUVJPcHRpb25zIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjc6IgAqAG5hbWUiO3M6NjoicmV0dXJuIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE3NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNToiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6cmVuZGVyKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJyZW5kZXIiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoiZGF0YSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJmaWxlIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO3M6NDoibnVsbCI7czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE3OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fX1zOjM4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpnZXRNYXRyaXgoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Njc6IlJldHVybnMgYSBRUk1hdHJpeCBvYmplY3QgZm9yIHRoZSBnaXZlbiAkZGF0YSBhbmQgY3VycmVudCBRUk9wdGlvbnMiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFRocm93cyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxOToiUVJDb2RlRGF0YUV4Y2VwdGlvbiI7fX1zOjc6IgAqAG5hbWUiO3M6NjoidGhyb3dzIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE4MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozODoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6Z2V0TWF0cml4KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJnZXRNYXRyaXgiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoiZGF0YSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxODg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJRUk1hdHJpeCI7fX19czo0NjoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6aW5pdERhdGFJbnRlcmZhY2UoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTE6InJldHVybnMgYSBmcmVzaCBRUkRhdGFJbnRlcmZhY2UgZm9yIHRoZSBnaXZlbiAkZGF0YSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVGhyb3dzIjozOntzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJDb2RlRGF0YUV4Y2VwdGlvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE5OiJRUkNvZGVEYXRhRXhjZXB0aW9uIjt9fXM6NzoiACoAbmFtZSI7czo2OiJ0aHJvd3MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6OTM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjA5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjppbml0RGF0YUludGVyZmFjZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTc6ImluaXREYXRhSW50ZXJmYWNlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImRhdGEiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjE0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJRUkRhdGFJbnRlcmZhY2UiO319fXM6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OmluaXRPdXRwdXRJbnRlcmZhY2UoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NDQ6InJldHVybnMgYSBmcmVzaCAoYnVpbHQtaW4pIFFST3V0cHV0SW50ZXJmYWNlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xUaHJvd3MiOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSQ29kZU91dHB1dEV4Y2VwdGlvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIxOiJRUkNvZGVPdXRwdXRFeGNlcHRpb24iO319czo3OiIAKgBuYW1lIjtzOjY6InRocm93cyI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMzU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OmluaXRPdXRwdXRJbnRlcmZhY2UoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE5OiJpbml0T3V0cHV0SW50ZXJmYWNlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImRhdGEiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjQwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoiUVJPdXRwdXRJbnRlcmZhY2UiO319fXM6Mzc6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OmlzTnVtYmVyKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjM5OiJjaGVja3MgaWYgYSBzdHJpbmcgcXVhbGlmaWVzIGFzIG51bWVyaWMiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNTg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzc6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OmlzTnVtYmVyKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJpc051bWJlciI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo2OiJzdHJpbmciO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjYxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQm9vbGVhbiI6MDp7fX1zOjM5OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjppc0FscGhhTnVtKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQ0OiJjaGVja3MgaWYgYSBzdHJpbmcgcXVhbGlmaWVzIGFzIGFscGhhbnVtZXJpYyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjkzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI2NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6aXNBbHBoYU51bSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6ImlzQWxwaGFOdW0iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6Njoic3RyaW5nIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI2ODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e319czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6Y2hlY2tTdHJpbmcoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTE1OiJjaGVja3MgaXMgYSBnaXZlbiAkc3RyaW5nIG1hdGNoZXMgdGhlIGNoYXJhY3RlcnMgb2YgYSBnaXZlbiAkY2hhcm1hcCwgcmV0dXJucyBmYWxzZSBvbiB0aGUgZmlyc3QgaW52YWxpZCBvY2N1cmVuY2UuIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6OTM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjcyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpjaGVja1N0cmluZygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6ImNoZWNrU3RyaW5nIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjY6InN0cmluZyI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJjaGFybWFwIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNzU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xCb29sZWFuIjowOnt9fXM6MzY6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OmlzS2FuamkoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mzc6ImNoZWNrcyBpZiBhIHN0cmluZyBxdWFsaWZpZXMgYXMgS2FuamkiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyODY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzY6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OmlzS2FuamkoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6ImlzS2FuamkiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6Njoic3RyaW5nIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI4OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e319czozNToiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6aXNCeXRlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjc6ImEgZHVtbXkiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo5MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMDY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzU6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6OmlzQnl0ZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiaXNCeXRlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImRhdGEiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzA5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQm9vbGVhbiI6MDp7fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/9/J/SXZBq5qhnIcmspnShLFQ b/files/9/J/SXZBq5qhnIcmspnShLFQ
deleted file mode 100644
index 09839d44f..000000000
--- a/files/9/J/SXZBq5qhnIcmspnShLFQ
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A4fb7bb7759cd104c674b9c264f688bc5-a3b8bb2495938059ec4f5adfb71878f9
-s:26756:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTk6IkNsYXNzIFFSSW1hZ2lja1Rlc3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6ODp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTc6IlFSSW1hZ2lja1Rlc3QucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMDQuMDcuMjAxOCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6Mjg6ImNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6Njoic21pbGV5IjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjIxOiJzbWlsZXlAY2hpbGxlcmxhbi5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IjIwMTggc21pbGV5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo1O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozOiJNSVQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjY7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEyOiJub2luc3BlY3Rpb24iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI3OiJQaHBVbmRlZmluZWRDbGFzc0luc3BlY3Rpb24iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjc7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEyOiJub2luc3BlY3Rpb24iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM1OiJQaHBDb21wb3NlckV4dGVuc2lvblN0dWJzSW5zcGVjdGlvbiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiYTNiOGJiMjQ5NTkzODA1OWVjNGY1YWRmYjcxODc4ZjkiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxNzoiUVJJbWFnaWNrVGVzdC5waHAiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czozMDoidGVzdHMvT3V0cHV0L1FSSW1hZ2lja1Rlc3QucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czoxNzUxOiI8P3BocAovKioKICogQ2xhc3MgUVJJbWFnaWNrVGVzdAogKgogKiBAZmlsZXNvdXJjZSAgIFFSSW1hZ2lja1Rlc3QucGhwCiAqIEBjcmVhdGVkICAgICAgMDQuMDcuMjAxOAogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXQKICogQGF1dGhvciAgICAgICBzbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE4IHNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKgogKiBAbm9pbnNwZWN0aW9uIFBocFVuZGVmaW5lZENsYXNzSW5zcGVjdGlvbgogKiBAbm9pbnNwZWN0aW9uIFBocENvbXBvc2VyRXh0ZW5zaW9uU3R1YnNJbnNwZWN0aW9uCiAqLwoKbmFtZXNwYWNlIGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXQ7Cgp1c2UgSW1hZ2ljazsKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXHtRUkNvZGUsIFFST3B0aW9uc307CnVzZSBjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRce1FST3V0cHV0SW50ZXJmYWNlLCBRUkltYWdpY2t9OwoKLyoqCiAqIFRlc3RzIHRoZSBRUkltYWdpY2sgb3V0cHV0IG1vZHVsZQogKi8KY2xhc3MgUVJJbWFnaWNrVGVzdCBleHRlbmRzIFFST3V0cHV0VGVzdEFic3RyYWN0ewoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqIEBpbnRlcm5hbAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0VXAoKTp2b2lkewoKCQlpZighZXh0ZW5zaW9uX2xvYWRlZCgnaW1hZ2ljaycpKXsKCQkJJHRoaXMtPm1hcmtUZXN0U2tpcHBlZCgnZXh0LWltYWdpY2sgbm90IGxvYWRlZCcpOwoKCQkJLyoqIEBub2luc3BlY3Rpb24gUGhwVW5yZWFjaGFibGVTdGF0ZW1lbnRJbnNwZWN0aW9uICovCgkJCXJldHVybjsKCQl9CgoJCXBhcmVudDo6c2V0VXAoKTsKCX0KCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE91dHB1dEludGVyZmFjZShRUk9wdGlvbnMgJG9wdGlvbnMpOlFST3V0cHV0SW50ZXJmYWNlewoJCXJldHVybiBuZXcgUVJJbWFnaWNrKCRvcHRpb25zLCAkdGhpcy0+bWF0cml4KTsKCX0KCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHR5cGVzKCk6YXJyYXl7CgkJcmV0dXJuIFsKCQkJJ2ltYWdpY2snID0+IFtRUkNvZGU6Ok9VVFBVVF9JTUFHSUNLXSwKCQldOwoJfQoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RTZXRNb2R1bGVWYWx1ZXMoKTp2b2lkewoKCQkkdGhpcy0+b3B0aW9ucy0+bW9kdWxlVmFsdWVzID0gWwoJCQkvLyBkYXRhCgkJCTEwMjQgPT4gJyM0QTYwMDAnLAoJCQk0ICAgID0+ICcjRUNGOUJFJywKCQldOwoKCQkkdGhpcy0+b3V0cHV0SW50ZXJmYWNlID0gJHRoaXMtPmdldE91dHB1dEludGVyZmFjZSgkdGhpcy0+b3B0aW9ucyk7CgkJJHRoaXMtPm91dHB1dEludGVyZmFjZS0+ZHVtcCgpOwoKCQkkdGhpczo6YXNzZXJ0VHJ1ZSh0cnVlKTsgLy8gdHJpY2tpbmcgdGhlIGNvZGUgY292ZXJhZ2UKCX0KCglwdWJsaWMgZnVuY3Rpb24gdGVzdE91dHB1dEdldFJlc291cmNlKCk6dm9pZHsKCQkkdGhpcy0+b3B0aW9ucy0+cmV0dXJuUmVzb3VyY2UgPSB0cnVlOwoJCSR0aGlzLT5vdXRwdXRJbnRlcmZhY2UgICAgICAgICA9ICR0aGlzLT5nZXRPdXRwdXRJbnRlcmZhY2UoJHRoaXMtPm9wdGlvbnMpOwoKCQkkdGhpczo6YXNzZXJ0SW5zdGFuY2VPZihJbWFnaWNrOjpjbGFzcywgJHRoaXMtPm91dHB1dEludGVyZmFjZS0+ZHVtcCgpKTsKCX0KCgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6Mjk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiT3V0cHV0Ijt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2lja1Rlc3QiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2lja1Rlc3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMzoiUVJJbWFnaWNrVGVzdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzM6IlRlc3RzIHRoZSBRUkltYWdpY2sgb3V0cHV0IG1vZHVsZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyODoiY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dCI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6NTp7czo3OiJJbWFnaWNrIjtzOjc6IkltYWdpY2siO3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO3M6OToiUVJPcHRpb25zIjtzOjI3OiJjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO3M6MTc6IlFST3V0cHV0SW50ZXJmYWNlIjtzOjQyOiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2UiO3M6OToiUVJJbWFnaWNrIjtzOjM0OiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnaWNrIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJPdXRwdXRUZXN0QWJzdHJhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMDoiUVJPdXRwdXRUZXN0QWJzdHJhY3QiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjU6e3M6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2lja1Rlc3Q6OnNldFVwKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2lja1Rlc3Q6OnNldFVwKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJzZXRVcCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NjU6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2lja1Rlc3Q6OmdldE91dHB1dEludGVyZmFjZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY1OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUkltYWdpY2tUZXN0OjpnZXRPdXRwdXRJbnRlcmZhY2UoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE4OiJnZXRPdXRwdXRJbnRlcmZhY2UiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6Nzoib3B0aW9ucyI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiUVJPcHRpb25zIjt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoiUVJPdXRwdXRJbnRlcmZhY2UiO319fXM6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2lja1Rlc3Q6OnR5cGVzKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2lja1Rlc3Q6OnR5cGVzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJ0eXBlcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fXM6NjY6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2lja1Rlc3Q6OnRlc3RTZXRNb2R1bGVWYWx1ZXMoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXREb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjYxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUkltYWdpY2tUZXN0Ojp0ZXN0U2V0TW9kdWxlVmFsdWVzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxOToidGVzdFNldE1vZHVsZVZhbHVlcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6Njg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2lja1Rlc3Q6OnRlc3RPdXRwdXRHZXRSZXNvdXJjZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtOO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUkltYWdpY2tUZXN0Ojp0ZXN0T3V0cHV0R2V0UmVzb3VyY2UoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIxOiJ0ZXN0T3V0cHV0R2V0UmVzb3VyY2UiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Nzg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/A/5/lrhCmOj1ZivGvk6QgZEA b/files/A/5/lrhCmOj1ZivGvk6QgZEA
deleted file mode 100644
index 1fc826bbf..000000000
--- a/files/A/5/lrhCmOj1ZivGvk6QgZEA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Ad4de4c60838bf3ee18fa3ede3e4daff2-9721b7ebbb905236bddc456bbdf57c16
-s:60856:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTY6IkNsYXNzIFBvbHlub21pYWwiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTQ6IlBvbHlub21pYWwucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMjUuMTEuMjAxNSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjU6ImNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnMiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6NjoiU21pbGV5IjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjIxOiJzbWlsZXlAY2hpbGxlcmxhbi5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IjIwMTUgU21pbGV5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo1O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozOiJNSVQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czowOiIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjA6e319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6Ijk3MjFiN2ViYmI5MDUyMzZiZGRjNDU2YmJkZjU3YzE2IjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWUiO3M6MTQ6IlBvbHlub21pYWwucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6MjY6InNyYy9IZWxwZXJzL1BvbHlub21pYWwucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czo1NjU0OiI8P3BocAovKioKICogQ2xhc3MgUG9seW5vbWlhbAogKgogKiBAZmlsZXNvdXJjZSAgIFBvbHlub21pYWwucGhwCiAqIEBjcmVhdGVkICAgICAgMjUuMTEuMjAxNQogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnMKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzOwoKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZUV4Y2VwdGlvbjsKCnVzZSBmdW5jdGlvbiBhcnJheV9maWxsLCBjb3VudCwgc3ByaW50ZjsKCi8qKgogKiBQb2x5bm9taWFsIGxvbmcgZGl2aXNpb24gaGVscGVycwogKgogKiBAc2VlIGh0dHA6Ly93d3cudGhvbmt5LmNvbS9xci1jb2RlLXR1dG9yaWFsL2Vycm9yLWNvcnJlY3Rpb24tY29kaW5nCiAqLwpmaW5hbCBjbGFzcyBQb2x5bm9taWFsewoKCS8qKgoJICogQHNlZSBodHRwOi8vd3d3LnRob25reS5jb20vcXItY29kZS10dXRvcmlhbC9sb2ctYW50aWxvZy10YWJsZQoJICovCglwcm90ZWN0ZWQgY29uc3QgdGFibGUgPSBbCgkJWyAgMSwgICAwXSwgWyAgMiwgICAwXSwgWyAgNCwgICAxXSwgWyAgOCwgIDI1XSwgWyAxNiwgICAyXSwgWyAzMiwgIDUwXSwgWyA2NCwgIDI2XSwgWzEyOCwgMTk4XSwKCQlbIDI5LCAgIDNdLCBbIDU4LCAyMjNdLCBbMTE2LCAgNTFdLCBbMjMyLCAyMzhdLCBbMjA1LCAgMjddLCBbMTM1LCAxMDRdLCBbIDE5LCAxOTldLCBbIDM4LCAgNzVdLAoJCVsgNzYsICAgNF0sIFsxNTIsIDEwMF0sIFsgNDUsIDIyNF0sIFsgOTAsICAxNF0sIFsxODAsICA1Ml0sIFsxMTcsIDE0MV0sIFsyMzQsIDIzOV0sIFsyMDEsIDEyOV0sCgkJWzE0MywgIDI4XSwgWyAgMywgMTkzXSwgWyAgNiwgMTA1XSwgWyAxMiwgMjQ4XSwgWyAyNCwgMjAwXSwgWyA0OCwgICA4XSwgWyA5NiwgIDc2XSwgWzE5MiwgMTEzXSwKCQlbMTU3LCAgIDVdLCBbIDM5LCAxMzhdLCBbIDc4LCAxMDFdLCBbMTU2LCAgNDddLCBbIDM3LCAyMjVdLCBbIDc0LCAgMzZdLCBbMTQ4LCAgMTVdLCBbIDUzLCAgMzNdLAoJCVsxMDYsICA1M10sIFsyMTIsIDE0N10sIFsxODEsIDE0Ml0sIFsxMTksIDIxOF0sIFsyMzgsIDI0MF0sIFsxOTMsICAxOF0sIFsxNTksIDEzMF0sIFsgMzUsICA2OV0sCgkJWyA3MCwgIDI5XSwgWzE0MCwgMTgxXSwgWyAgNSwgMTk0XSwgWyAxMCwgMTI1XSwgWyAyMCwgMTA2XSwgWyA0MCwgIDM5XSwgWyA4MCwgMjQ5XSwgWzE2MCwgMTg1XSwKCQlbIDkzLCAyMDFdLCBbMTg2LCAxNTRdLCBbMTA1LCAgIDldLCBbMjEwLCAxMjBdLCBbMTg1LCAgNzddLCBbMTExLCAyMjhdLCBbMjIyLCAxMTRdLCBbMTYxLCAxNjZdLAoJCVsgOTUsICAgNl0sIFsxOTAsIDE5MV0sIFsgOTcsIDEzOV0sIFsxOTQsICA5OF0sIFsxNTMsIDEwMl0sIFsgNDcsIDIyMV0sIFsgOTQsICA0OF0sIFsxODgsIDI1M10sCgkJWzEwMSwgMjI2XSwgWzIwMiwgMTUyXSwgWzEzNywgIDM3XSwgWyAxNSwgMTc5XSwgWyAzMCwgIDE2XSwgWyA2MCwgMTQ1XSwgWzEyMCwgIDM0XSwgWzI0MCwgMTM2XSwKCQlbMjUzLCAgNTRdLCBbMjMxLCAyMDhdLCBbMjExLCAxNDhdLCBbMTg3LCAyMDZdLCBbMTA3LCAxNDNdLCBbMjE0LCAxNTBdLCBbMTc3LCAyMTldLCBbMTI3LCAxODldLAoJCVsyNTQsIDI0MV0sIFsyMjUsIDIxMF0sIFsyMjMsICAxOV0sIFsxNjMsICA5Ml0sIFsgOTEsIDEzMV0sIFsxODIsICA1Nl0sIFsxMTMsICA3MF0sIFsyMjYsICA2NF0sCgkJWzIxNywgIDMwXSwgWzE3NSwgIDY2XSwgWyA2NywgMTgyXSwgWzEzNCwgMTYzXSwgWyAxNywgMTk1XSwgWyAzNCwgIDcyXSwgWyA2OCwgMTI2XSwgWzEzNiwgMTEwXSwKCQlbIDEzLCAxMDddLCBbIDI2LCAgNThdLCBbIDUyLCAgNDBdLCBbMTA0LCAgODRdLCBbMjA4LCAyNTBdLCBbMTg5LCAxMzNdLCBbMTAzLCAxODZdLCBbMjA2LCAgNjFdLAoJCVsxMjksIDIwMl0sIFsgMzEsICA5NF0sIFsgNjIsIDE1NV0sIFsxMjQsIDE1OV0sIFsyNDgsICAxMF0sIFsyMzcsICAyMV0sIFsxOTksIDEyMV0sIFsxNDcsICA0M10sCgkJWyA1OSwgIDc4XSwgWzExOCwgMjEyXSwgWzIzNiwgMjI5XSwgWzE5NywgMTcyXSwgWzE1MSwgMTE1XSwgWyA1MSwgMjQzXSwgWzEwMiwgMTY3XSwgWzIwNCwgIDg3XSwKCQlbMTMzLCAgIDddLCBbIDIzLCAxMTJdLCBbIDQ2LCAxOTJdLCBbIDkyLCAyNDddLCBbMTg0LCAxNDBdLCBbMTA5LCAxMjhdLCBbMjE4LCAgOTldLCBbMTY5LCAgMTNdLAoJCVsgNzksIDEwM10sIFsxNTgsICA3NF0sIFsgMzMsIDIyMl0sIFsgNjYsIDIzN10sIFsxMzIsICA0OV0sIFsgMjEsIDE5N10sIFsgNDIsIDI1NF0sIFsgODQsICAyNF0sCgkJWzE2OCwgMjI3XSwgWyA3NywgMTY1XSwgWzE1NCwgMTUzXSwgWyA0MSwgMTE5XSwgWyA4MiwgIDM4XSwgWzE2NCwgMTg0XSwgWyA4NSwgMTgwXSwgWzE3MCwgMTI0XSwKCQlbIDczLCAgMTddLCBbMTQ2LCAgNjhdLCBbIDU3LCAxNDZdLCBbMTE0LCAyMTddLCBbMjI4LCAgMzVdLCBbMjEzLCAgMzJdLCBbMTgzLCAxMzddLCBbMTE1LCAgNDZdLAoJCVsyMzAsICA1NV0sIFsyMDksICA2M10sIFsxOTEsIDIwOV0sIFsgOTksICA5MV0sIFsxOTgsIDE0OV0sIFsxNDUsIDE4OF0sIFsgNjMsIDIwN10sIFsxMjYsIDIwNV0sCgkJWzI1MiwgMTQ0XSwgWzIyOSwgMTM1XSwgWzIxNSwgMTUxXSwgWzE3OSwgMTc4XSwgWzEyMywgMjIwXSwgWzI0NiwgMjUyXSwgWzI0MSwgMTkwXSwgWzI1NSwgIDk3XSwKCQlbMjI3LCAyNDJdLCBbMjE5LCAgODZdLCBbMTcxLCAyMTFdLCBbIDc1LCAxNzFdLCBbMTUwLCAgMjBdLCBbIDQ5LCAgNDJdLCBbIDk4LCAgOTNdLCBbMTk2LCAxNThdLAoJCVsxNDksIDEzMl0sIFsgNTUsICA2MF0sIFsxMTAsICA1N10sIFsyMjAsICA4M10sIFsxNjUsICA3MV0sIFsgODcsIDEwOV0sIFsxNzQsICA2NV0sIFsgNjUsIDE2Ml0sCgkJWzEzMCwgIDMxXSwgWyAyNSwgIDQ1XSwgWyA1MCwgIDY3XSwgWzEwMCwgMjE2XSwgWzIwMCwgMTgzXSwgWzE0MSwgMTIzXSwgWyAgNywgMTY0XSwgWyAxNCwgMTE4XSwKCQlbIDI4LCAxOTZdLCBbIDU2LCAgMjNdLCBbMTEyLCAgNzNdLCBbMjI0LCAyMzZdLCBbMjIxLCAxMjddLCBbMTY3LCAgMTJdLCBbIDgzLCAxMTFdLCBbMTY2LCAyNDZdLAoJCVsgODEsIDEwOF0sIFsxNjIsIDE2MV0sIFsgODksICA1OV0sIFsxNzgsICA4Ml0sIFsxMjEsICA0MV0sIFsyNDIsIDE1N10sIFsyNDksICA4NV0sIFsyMzksIDE3MF0sCgkJWzE5NSwgMjUxXSwgWzE1NSwgIDk2XSwgWyA0MywgMTM0XSwgWyA4NiwgMTc3XSwgWzE3MiwgMTg3XSwgWyA2OSwgMjA0XSwgWzEzOCwgIDYyXSwgWyAgOSwgIDkwXSwKCQlbIDE4LCAyMDNdLCBbIDM2LCAgODldLCBbIDcyLCAgOTVdLCBbMTQ0LCAxNzZdLCBbIDYxLCAxNTZdLCBbMTIyLCAxNjldLCBbMjQ0LCAxNjBdLCBbMjQ1LCAgODFdLAoJCVsyNDcsICAxMV0sIFsyNDMsIDI0NV0sIFsyNTEsICAyMl0sIFsyMzUsIDIzNV0sIFsyMDMsIDEyMl0sIFsxMzksIDExN10sIFsgMTEsICA0NF0sIFsgMjIsIDIxNV0sCgkJWyA0NCwgIDc5XSwgWyA4OCwgMTc0XSwgWzE3NiwgMjEzXSwgWzEyNSwgMjMzXSwgWzI1MCwgMjMwXSwgWzIzMywgMjMxXSwgWzIwNywgMTczXSwgWzEzMSwgMjMyXSwKCQlbIDI3LCAxMTZdLCBbIDU0LCAyMTRdLCBbMTA4LCAyNDRdLCBbMjE2LCAyMzRdLCBbMTczLCAxNjhdLCBbIDcxLCAgODBdLCBbMTQyLCAgODhdLCBbICAxLCAxNzVdLAoJXTsKCgkvKioKCSAqIEB2YXIgaW50W10KCSAqLwoJcHJvdGVjdGVkIGFycmF5ICRudW0gPSBbXTsKCgkvKioKCSAqIFBvbHlub21pYWwgY29uc3RydWN0b3IuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkbnVtID0gbnVsbCwgaW50ICRzaGlmdCA9IG51bGwpewoJCSR0aGlzLT5zZXROdW0oJG51bSA/PyBbMV0sICRzaGlmdCk7Cgl9CgoJLyoqCgkgKgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtKCk6YXJyYXl7CgkJcmV0dXJuICR0aGlzLT5udW07Cgl9CgoJLyoqCgkgKiBAcGFyYW0gaW50W10gICAgJG51bQoJICogQHBhcmFtIGludHxudWxsICRzaGlmdAoJICoKCSAqIEByZXR1cm4gXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0TnVtKGFycmF5ICRudW0sIGludCAkc2hpZnQgPSBudWxsKTpQb2x5bm9taWFsewoJCSRvZmZzZXQgPSAwOwoJCSRudW1Db3VudCA9IGNvdW50KCRudW0pOwoKCQl3aGlsZSgkb2Zmc2V0IDwgJG51bUNvdW50ICYmICRudW1bJG9mZnNldF0gPT09IDApewoJCQkkb2Zmc2V0Kys7CgkJfQoKCQkkdGhpcy0+bnVtID0gYXJyYXlfZmlsbCgwLCAkbnVtQ291bnQgLSAkb2Zmc2V0ICsgKCRzaGlmdCA/PyAwKSwgMCk7CgoJCWZvcigkaSA9IDA7ICRpIDwgJG51bUNvdW50IC0gJG9mZnNldDsgJGkrKyl7CgkJCSR0aGlzLT5udW1bJGldID0gJG51bVskaSArICRvZmZzZXRdOwoJCX0KCgkJcmV0dXJuICR0aGlzOwoJfQoKCS8qKgoJICogQHBhcmFtIGludFtdICRlCgkgKgoJICogQHJldHVybiBcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xQb2x5bm9taWFsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBtdWx0aXBseShhcnJheSAkZSk6UG9seW5vbWlhbHsKCQkkbiA9IGFycmF5X2ZpbGwoMCwgY291bnQoJHRoaXMtPm51bSkgKyBjb3VudCgkZSkgLSAxLCAwKTsKCgkJZm9yZWFjaCgkdGhpcy0+bnVtIGFzICRpID0+ICR2aSl7CgkJCSR2aSA9ICR0aGlzLT5nbG9nKCR2aSk7CgoJCQlmb3JlYWNoKCRlIGFzICRqID0+ICR2ail7CgkJCQkkblskaSArICRqXSBePSAkdGhpcy0+Z2V4cCgkdmkgKyAkdGhpcy0+Z2xvZygkdmopKTsKCQkJfQoKCQl9CgoJCSR0aGlzLT5zZXROdW0oJG4pOwoKCQlyZXR1cm4gJHRoaXM7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gaW50W10gJGUKCSAqCgkgKiBAcmV0dXJuIFxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG1vZChhcnJheSAkZSk6UG9seW5vbWlhbHsKCQkkbiA9ICR0aGlzLT5udW07CgoJCWlmKGNvdW50KCRuKSAtIGNvdW50KCRlKSA8IDApewoJCQlyZXR1cm4gJHRoaXM7CgkJfQoKCQkkcmF0aW8gPSAkdGhpcy0+Z2xvZygkblswXSkgLSAkdGhpcy0+Z2xvZygkZVswXSk7CgoJCWZvcmVhY2goJGUgYXMgJGkgPT4gJHYpewoJCQkkblskaV0gXj0gJHRoaXMtPmdleHAoJHRoaXMtPmdsb2coJHYpICsgJHJhdGlvKTsKCQl9CgoJCSR0aGlzLT5zZXROdW0oJG4pLT5tb2QoJGUpOwoKCQlyZXR1cm4gJHRoaXM7Cgl9CgoJLyoqCgkgKiBAdGhyb3dzIFxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGVFeGNlcHRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdsb2coaW50ICRuKTppbnR7CgoJCWlmKCRuIDwgMSl7CgkJCXRocm93IG5ldyBRUkNvZGVFeGNlcHRpb24oc3ByaW50ZignbG9nKCVzKScsICRuKSk7CgkJfQoKCQlyZXR1cm4gUG9seW5vbWlhbDo6dGFibGVbJG5dWzFdOwoJfQoKCS8qKgoJICoKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdleHAoaW50ICRuKTppbnR7CgoJCWlmKCRuIDwgMCl7CgkJCSRuICs9IDI1NTsKCQl9CgkJZWxzZWlmKCRuID49IDI1Nil7CgkJCSRuIC09IDI1NTsKCQl9CgoJCXJldHVybiBQb2x5bm9taWFsOjp0YWJsZVskbl1bMF07Cgl9Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6MjY6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjY6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NzoiSGVscGVycyI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjM3OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xQb2x5bm9taWFsIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTE6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM3OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xQb2x5bm9taWFsIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6IlBvbHlub21pYWwiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMyOiJQb2x5bm9taWFsIGxvbmcgZGl2aXNpb24gaGVscGVycyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybCI6MTp7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwAdXJpIjtzOjYyOiJodHRwOi8vd3d3LnRob25reS5jb20vcXItY29kZS10dXRvcmlhbC9lcnJvci1jb3JyZWN0aW9uLWNvZGluZyI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyNToiY2hpbGxlcmxhblxRUkNvZGVcSGVscGVycyI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MTp7czoxNToiUVJDb2RlRXhjZXB0aW9uIjtzOjMzOiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGVFeGNlcHRpb24iO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjE7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YToxOntzOjQ0OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xQb2x5bm9taWFsOjp0YWJsZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NDoiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbDo6dGFibGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJ0YWJsZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwiOjE6e3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsAHVyaSI7czo1NjoiaHR0cDovL3d3dy50aG9ua3kuY29tL3FyLWNvZGUtdHV0b3JpYWwvbG9nLWFudGlsb2ctdGFibGUiO31zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czoyODUwOiJbWzEsIDBdLCBbMiwgMF0sIFs0LCAxXSwgWzgsIDI1XSwgWzE2LCAyXSwgWzMyLCA1MF0sIFs2NCwgMjZdLCBbMTI4LCAxOThdLCBbMjksIDNdLCBbNTgsIDIyM10sIFsxMTYsIDUxXSwgWzIzMiwgMjM4XSwgWzIwNSwgMjddLCBbMTM1LCAxMDRdLCBbMTksIDE5OV0sIFszOCwgNzVdLCBbNzYsIDRdLCBbMTUyLCAxMDBdLCBbNDUsIDIyNF0sIFs5MCwgMTRdLCBbMTgwLCA1Ml0sIFsxMTcsIDE0MV0sIFsyMzQsIDIzOV0sIFsyMDEsIDEyOV0sIFsxNDMsIDI4XSwgWzMsIDE5M10sIFs2LCAxMDVdLCBbMTIsIDI0OF0sIFsyNCwgMjAwXSwgWzQ4LCA4XSwgWzk2LCA3Nl0sIFsxOTIsIDExM10sIFsxNTcsIDVdLCBbMzksIDEzOF0sIFs3OCwgMTAxXSwgWzE1NiwgNDddLCBbMzcsIDIyNV0sIFs3NCwgMzZdLCBbMTQ4LCAxNV0sIFs1MywgMzNdLCBbMTA2LCA1M10sIFsyMTIsIDE0N10sIFsxODEsIDE0Ml0sIFsxMTksIDIxOF0sIFsyMzgsIDI0MF0sIFsxOTMsIDE4XSwgWzE1OSwgMTMwXSwgWzM1LCA2OV0sIFs3MCwgMjldLCBbMTQwLCAxODFdLCBbNSwgMTk0XSwgWzEwLCAxMjVdLCBbMjAsIDEwNl0sIFs0MCwgMzldLCBbODAsIDI0OV0sIFsxNjAsIDE4NV0sIFs5MywgMjAxXSwgWzE4NiwgMTU0XSwgWzEwNSwgOV0sIFsyMTAsIDEyMF0sIFsxODUsIDc3XSwgWzExMSwgMjI4XSwgWzIyMiwgMTE0XSwgWzE2MSwgMTY2XSwgWzk1LCA2XSwgWzE5MCwgMTkxXSwgWzk3LCAxMzldLCBbMTk0LCA5OF0sIFsxNTMsIDEwMl0sIFs0NywgMjIxXSwgWzk0LCA0OF0sIFsxODgsIDI1M10sIFsxMDEsIDIyNl0sIFsyMDIsIDE1Ml0sIFsxMzcsIDM3XSwgWzE1LCAxNzldLCBbMzAsIDE2XSwgWzYwLCAxNDVdLCBbMTIwLCAzNF0sIFsyNDAsIDEzNl0sIFsyNTMsIDU0XSwgWzIzMSwgMjA4XSwgWzIxMSwgMTQ4XSwgWzE4NywgMjA2XSwgWzEwNywgMTQzXSwgWzIxNCwgMTUwXSwgWzE3NywgMjE5XSwgWzEyNywgMTg5XSwgWzI1NCwgMjQxXSwgWzIyNSwgMjEwXSwgWzIyMywgMTldLCBbMTYzLCA5Ml0sIFs5MSwgMTMxXSwgWzE4MiwgNTZdLCBbMTEzLCA3MF0sIFsyMjYsIDY0XSwgWzIxNywgMzBdLCBbMTc1LCA2Nl0sIFs2NywgMTgyXSwgWzEzNCwgMTYzXSwgWzE3LCAxOTVdLCBbMzQsIDcyXSwgWzY4LCAxMjZdLCBbMTM2LCAxMTBdLCBbMTMsIDEwN10sIFsyNiwgNThdLCBbNTIsIDQwXSwgWzEwNCwgODRdLCBbMjA4LCAyNTBdLCBbMTg5LCAxMzNdLCBbMTAzLCAxODZdLCBbMjA2LCA2MV0sIFsxMjksIDIwMl0sIFszMSwgOTRdLCBbNjIsIDE1NV0sIFsxMjQsIDE1OV0sIFsyNDgsIDEwXSwgWzIzNywgMjFdLCBbMTk5LCAxMjFdLCBbMTQ3LCA0M10sIFs1OSwgNzhdLCBbMTE4LCAyMTJdLCBbMjM2LCAyMjldLCBbMTk3LCAxNzJdLCBbMTUxLCAxMTVdLCBbNTEsIDI0M10sIFsxMDIsIDE2N10sIFsyMDQsIDg3XSwgWzEzMywgN10sIFsyMywgMTEyXSwgWzQ2LCAxOTJdLCBbOTIsIDI0N10sIFsxODQsIDE0MF0sIFsxMDksIDEyOF0sIFsyMTgsIDk5XSwgWzE2OSwgMTNdLCBbNzksIDEwM10sIFsxNTgsIDc0XSwgWzMzLCAyMjJdLCBbNjYsIDIzN10sIFsxMzIsIDQ5XSwgWzIxLCAxOTddLCBbNDIsIDI1NF0sIFs4NCwgMjRdLCBbMTY4LCAyMjddLCBbNzcsIDE2NV0sIFsxNTQsIDE1M10sIFs0MSwgMTE5XSwgWzgyLCAzOF0sIFsxNjQsIDE4NF0sIFs4NSwgMTgwXSwgWzE3MCwgMTI0XSwgWzczLCAxN10sIFsxNDYsIDY4XSwgWzU3LCAxNDZdLCBbMTE0LCAyMTddLCBbMjI4LCAzNV0sIFsyMTMsIDMyXSwgWzE4MywgMTM3XSwgWzExNSwgNDZdLCBbMjMwLCA1NV0sIFsyMDksIDYzXSwgWzE5MSwgMjA5XSwgWzk5LCA5MV0sIFsxOTgsIDE0OV0sIFsxNDUsIDE4OF0sIFs2MywgMjA3XSwgWzEyNiwgMjA1XSwgWzI1MiwgMTQ0XSwgWzIyOSwgMTM1XSwgWzIxNSwgMTUxXSwgWzE3OSwgMTc4XSwgWzEyMywgMjIwXSwgWzI0NiwgMjUyXSwgWzI0MSwgMTkwXSwgWzI1NSwgOTddLCBbMjI3LCAyNDJdLCBbMjE5LCA4Nl0sIFsxNzEsIDIxMV0sIFs3NSwgMTcxXSwgWzE1MCwgMjBdLCBbNDksIDQyXSwgWzk4LCA5M10sIFsxOTYsIDE1OF0sIFsxNDksIDEzMl0sIFs1NSwgNjBdLCBbMTEwLCA1N10sIFsyMjAsIDgzXSwgWzE2NSwgNzFdLCBbODcsIDEwOV0sIFsxNzQsIDY1XSwgWzY1LCAxNjJdLCBbMTMwLCAzMV0sIFsyNSwgNDVdLCBbNTAsIDY3XSwgWzEwMCwgMjE2XSwgWzIwMCwgMTgzXSwgWzE0MSwgMTIzXSwgWzcsIDE2NF0sIFsxNCwgMTE4XSwgWzI4LCAxOTZdLCBbNTYsIDIzXSwgWzExMiwgNzNdLCBbMjI0LCAyMzZdLCBbMjIxLCAxMjddLCBbMTY3LCAxMl0sIFs4MywgMTExXSwgWzE2NiwgMjQ2XSwgWzgxLCAxMDhdLCBbMTYyLCAxNjFdLCBbODksIDU5XSwgWzE3OCwgODJdLCBbMTIxLCA0MV0sIFsyNDIsIDE1N10sIFsyNDksIDg1XSwgWzIzOSwgMTcwXSwgWzE5NSwgMjUxXSwgWzE1NSwgOTZdLCBbNDMsIDEzNF0sIFs4NiwgMTc3XSwgWzE3MiwgMTg3XSwgWzY5LCAyMDRdLCBbMTM4LCA2Ml0sIFs5LCA5MF0sIFsxOCwgMjAzXSwgWzM2LCA4OV0sIFs3MiwgOTVdLCBbMTQ0LCAxNzZdLCBbNjEsIDE1Nl0sIFsxMjIsIDE2OV0sIFsyNDQsIDE2MF0sIFsyNDUsIDgxXSwgWzI0NywgMTFdLCBbMjQzLCAyNDVdLCBbMjUxLCAyMl0sIFsyMzUsIDIzNV0sIFsyMDMsIDEyMl0sIFsxMzksIDExN10sIFsxMSwgNDRdLCBbMjIsIDIxNV0sIFs0NCwgNzldLCBbODgsIDE3NF0sIFsxNzYsIDIxM10sIFsxMjUsIDIzM10sIFsyNTAsIDIzMF0sIFsyMzMsIDIzMV0sIFsyMDcsIDE3M10sIFsxMzEsIDIzMl0sIFsyNywgMTE2XSwgWzU0LCAyMTRdLCBbMTA4LCAyNDRdLCBbMjE2LCAyMzRdLCBbMTczLCAxNjhdLCBbNzEsIDgwXSwgWzE0MiwgODhdLCBbMSwgMTc1XV0iO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO319fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjE6e3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWw6OiRudW0iO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWw6OiRudW0iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czozOiJudW0iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjY0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjI6IltdIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Njc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fX1zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0aG9kcyI7YTo3OntzOjUyOiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xQb2x5bm9taWFsOjpfX2NvbnN0cnVjdCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoyMzoiUG9seW5vbWlhbCBjb25zdHJ1Y3Rvci4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MjoiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbDo6X19jb25zdHJ1Y3QoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJfX2NvbnN0cnVjdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czozOiJudW0iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO3M6NDoibnVsbCI7czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjU6InNoaWZ0IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO3M6NDoibnVsbCI7czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjcyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9fXM6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWw6OmdldE51bSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbDo6Z2V0TnVtKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJnZXROdW0iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Nzk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX1zOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xQb2x5bm9taWFsOjpzZXROdW0oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjM6e2k6MDtPOjQ0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbSI6Njp7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAHZhcmlhYmxlTmFtZSI7czozOiJudW0iO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6NToic2hpZnQiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9aToxO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xOdWxsXyI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO31zOjc6IgAqAG5hbWUiO3M6NToicGFyYW0iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNzoiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJQb2x5bm9taWFsIjt9fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6ODM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWw6OnNldE51bSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6Njoic2V0TnVtIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjM6Im51bSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NToic2hpZnQiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7czo0OiJudWxsIjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6ODk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNzoiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJQb2x5bm9taWFsIjt9fX1zOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xQb2x5bm9taWFsOjptdWx0aXBseSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtIjo2OntzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AdmFyaWFibGVOYW1lIjtzOjE6ImUiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzc6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWwiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoiUG9seW5vbWlhbCI7fX1zOjc6IgAqAG5hbWUiO3M6NjoicmV0dXJuIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEwNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbDo6bXVsdGlwbHkoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6Im11bHRpcGx5Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjE6ImUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExMTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM3OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xQb2x5bm9taWFsIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6IlBvbHlub21pYWwiO319fXM6NDQ6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWw6Om1vZCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtIjo2OntzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AdmFyaWFibGVOYW1lIjtzOjE6ImUiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzc6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWwiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoiUG9seW5vbWlhbCI7fX1zOjc6IgAqAG5hbWUiO3M6NjoicmV0dXJuIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEyODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NDoiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbDo6bW9kKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czozOiJtb2QiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MToiZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTMzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzc6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWwiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoiUG9seW5vbWlhbCI7fX19czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbDo6Z2xvZygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFRocm93cyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzQ6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGVFeGNlcHRpb24iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToiUVJDb2RlRXhjZXB0aW9uIjt9fXM6NzoiACoAbmFtZSI7czo2OiJ0aHJvd3MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTUxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xQb2x5bm9taWFsOjpnbG9nKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJnbG9nIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjE6Im4iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTU0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xQb2x5bm9taWFsOjpnZXhwKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE2MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbDo6Z2V4cCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiZ2V4cCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czoxOiJuIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE2NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9fQ==";
\ No newline at end of file
diff --git a/files/B/F/71nvuyJ3zQ+d295LXKEg b/files/B/F/71nvuyJ3zQ+d295LXKEg
deleted file mode 100644
index dff687097..000000000
--- a/files/B/F/71nvuyJ3zQ+d295LXKEg
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A17db8f965a78c479fa69beeda56ede1c-30c66b599dbab3a11b48ee30e248b45a
-s:20664:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTg6IkNsYXNzIFFSTWFya3VwVGVzdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxNjoiUVJNYXJrdXBUZXN0LnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjI0LjEyLjIwMTciO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI4OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjY6IlNtaWxleSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoyMToic21pbGV5QGNoaWxsZXJsYW4ubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiIyMDE3IFNtaWxleSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzoiTUlUIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiIzMGM2NmI1OTlkYmFiM2ExMWI0OGVlMzBlMjQ4YjQ1YSI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjE2OiJRUk1hcmt1cFRlc3QucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6Mjk6InRlc3RzL091dHB1dC9RUk1hcmt1cFRlc3QucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czoxMjY3OiI8P3BocAovKioKICogQ2xhc3MgUVJNYXJrdXBUZXN0CiAqCiAqIEBmaWxlc291cmNlICAgUVJNYXJrdXBUZXN0LnBocAogKiBAY3JlYXRlZCAgICAgIDI0LjEyLjIwMTcKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0CiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dDsKCnVzZSBjaGlsbGVybGFuXFFSQ29kZVx7UVJDb2RlLCBRUk9wdGlvbnN9Owp1c2UgY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XHtRUk91dHB1dEludGVyZmFjZSwgUVJNYXJrdXB9OwoKLyoqCiAqIFRlc3RzIHRoZSBRUk1hcmt1cCBvdXRwdXQgbW9kdWxlCiAqLwpjbGFzcyBRUk1hcmt1cFRlc3QgZXh0ZW5kcyBRUk91dHB1dFRlc3RBYnN0cmFjdHsKCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE91dHB1dEludGVyZmFjZShRUk9wdGlvbnMgJG9wdGlvbnMpOlFST3V0cHV0SW50ZXJmYWNlewoJCXJldHVybiBuZXcgUVJNYXJrdXAoJG9wdGlvbnMsICR0aGlzLT5tYXRyaXgpOwoJfQoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqIEBpbnRlcm5hbAoJICovCglwdWJsaWMgZnVuY3Rpb24gdHlwZXMoKTphcnJheXsKCQlyZXR1cm4gWwoJCQknaHRtbCcgPT4gW1FSQ29kZTo6T1VUUFVUX01BUktVUF9IVE1MXSwKCQkJJ3N2ZycgID0+IFtRUkNvZGU6Ok9VVFBVVF9NQVJLVVBfU1ZHXSwKCQldOwoJfQoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RTZXRNb2R1bGVWYWx1ZXMoKTp2b2lkewoJCSR0aGlzLT5vcHRpb25zLT5pbWFnZUJhc2U2NCAgPSBmYWxzZTsKCQkkdGhpcy0+b3B0aW9ucy0+bW9kdWxlVmFsdWVzID0gWwoJCQkvLyBkYXRhCgkJCTEwMjQgPT4gJyM0QTYwMDAnLAoJCQk0ICAgID0+ICcjRUNGOUJFJywKCQldOwoKCQkkdGhpcy0+b3V0cHV0SW50ZXJmYWNlID0gJHRoaXMtPmdldE91dHB1dEludGVyZmFjZSgkdGhpcy0+b3B0aW9ucyk7CgkJJGRhdGEgPSAkdGhpcy0+b3V0cHV0SW50ZXJmYWNlLT5kdW1wKCk7CgkJJHRoaXM6OmFzc2VydFN0cmluZ0NvbnRhaW5zU3RyaW5nKCcjNEE2MDAwJywgJGRhdGEpOwoJCSR0aGlzOjphc3NlcnRTdHJpbmdDb250YWluc1N0cmluZygnI0VDRjlCRScsICRkYXRhKTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyOToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyOToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJPdXRwdXQiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJNYXJrdXBUZXN0IjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTE6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk1hcmt1cFRlc3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMjoiUVJNYXJrdXBUZXN0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozMjoiVGVzdHMgdGhlIFFSTWFya3VwIG91dHB1dCBtb2R1bGUiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6Mjg6ImNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXQiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjQ6e3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO3M6OToiUVJPcHRpb25zIjtzOjI3OiJjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO3M6MTc6IlFST3V0cHV0SW50ZXJmYWNlIjtzOjQyOiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2UiO3M6ODoiUVJNYXJrdXAiO3M6MzM6ImNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk1hcmt1cCI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcGFyZW50IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTA6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFST3V0cHV0VGVzdEFic3RyYWN0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjA6IlFST3V0cHV0VGVzdEFic3RyYWN0Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0aG9kcyI7YTozOntzOjY0OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk1hcmt1cFRlc3Q6OmdldE91dHB1dEludGVyZmFjZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY0OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk1hcmt1cFRlc3Q6OmdldE91dHB1dEludGVyZmFjZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTg6ImdldE91dHB1dEludGVyZmFjZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJvcHRpb25zIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjg6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJRUk9wdGlvbnMiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJRUk91dHB1dEludGVyZmFjZSI7fX19czo1MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJNYXJrdXBUZXN0Ojp0eXBlcygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk1hcmt1cFRlc3Q6OnR5cGVzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJ0eXBlcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fXM6NjU6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSTWFya3VwVGVzdDo6dGVzdFNldE1vZHVsZVZhbHVlcygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjU6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSTWFya3VwVGVzdDo6dGVzdFNldE1vZHVsZVZhbHVlcygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTk6InRlc3RTZXRNb2R1bGVWYWx1ZXMiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/B/F/7lEG3mZMGxTiO0ESPGzg b/files/B/F/7lEG3mZMGxTiO0ESPGzg
deleted file mode 100644
index 2b6b745d2..000000000
--- a/files/B/F/7lEG3mZMGxTiO0ESPGzg
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A51b9053c73b0b532c33480987e362b6d-526380325b7f6dc7cface233c575eb56
-s:21172:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTI6IkNsYXNzIE51bWJlciI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiTnVtYmVyLnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjI2LjExLjIwMTUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjIyOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjY6IlNtaWxleSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoyMToic21pbGV5QGNoaWxsZXJsYW4ubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiIyMDE1IFNtaWxleSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzoiTUlUIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiI1MjYzODAzMjViN2Y2ZGM3Y2ZhY2UyMzNjNTc1ZWI1NiI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjEwOiJOdW1iZXIucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6MTk6InNyYy9EYXRhL051bWJlci5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjE1NTY6Ijw/cGhwCi8qKgogKiBDbGFzcyBOdW1iZXIKICoKICogQGZpbGVzb3VyY2UgICBOdW1iZXIucGhwCiAqIEBjcmVhdGVkICAgICAgMjYuMTEuMjAxNQogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlXERhdGEKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxEYXRhOwoKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTsKCnVzZSBmdW5jdGlvbiBvcmQsIHNwcmludGYsIHN0cl9zcGxpdCwgc3Vic3RyOwoKLyoqCiAqIE51bWVyaWMgbW9kZTogZGVjaW1hbCBkaWdpdHMgMCB0byA5CiAqCiAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguMy4yCiAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguNC4yCiAqLwpmaW5hbCBjbGFzcyBOdW1iZXIgZXh0ZW5kcyBRUkRhdGFBYnN0cmFjdHsKCglwcm90ZWN0ZWQgaW50ICRkYXRhbW9kZSA9IFFSQ29kZTo6REFUQV9OVU1CRVI7CgoJcHJvdGVjdGVkIGFycmF5ICRsZW5ndGhCaXRzID0gWzEwLCAxMiwgMTRdOwoKCS8qKgoJICogQGluaGVyaXRkb2MKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHdyaXRlKHN0cmluZyAkZGF0YSk6dm9pZHsKCQkkaSA9IDA7CgoJCXdoaWxlKCRpICsgMiA8ICR0aGlzLT5zdHJsZW4pewoJCQkkdGhpcy0+Yml0QnVmZmVyLT5wdXQoJHRoaXMtPnBhcnNlSW50KHN1YnN0cigkZGF0YSwgJGksIDMpKSwgMTApOwoJCQkkaSArPSAzOwoJCX0KCgkJaWYoJGkgPCAkdGhpcy0+c3RybGVuKXsKCgkJCWlmKCR0aGlzLT5zdHJsZW4gLSAkaSA9PT0gMSl7CgkJCQkkdGhpcy0+Yml0QnVmZmVyLT5wdXQoJHRoaXMtPnBhcnNlSW50KHN1YnN0cigkZGF0YSwgJGksICRpICsgMSkpLCA0KTsKCQkJfQoJCQllbHNlaWYoJHRoaXMtPnN0cmxlbiAtICRpID09PSAyKXsKCQkJCSR0aGlzLT5iaXRCdWZmZXItPnB1dCgkdGhpcy0+cGFyc2VJbnQoc3Vic3RyKCRkYXRhLCAkaSwgJGkgKyAyKSksIDcpOwoJCQl9CgoJCX0KCgl9CgoJLyoqCgkgKiBnZXQgdGhlIGNvZGUgZm9yIHRoZSBnaXZlbiBudW1lcmljIHN0cmluZwoJICoKCSAqIEB0aHJvd3MgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJDb2RlRGF0YUV4Y2VwdGlvbiBvbiBhbiBpbGxlZ2FsIGNoYXJhY3RlciBvY2N1cmVuY2UKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZyAkc3RyaW5nKTppbnR7CgkJJG51bSA9IDA7CgoJCWZvcmVhY2goc3RyX3NwbGl0KCRzdHJpbmcpIGFzICRjaHIpewoJCQkkYyA9IG9yZCgkY2hyKTsKCgkJCWlmKCFpc3NldCgkdGhpczo6Q0hBUl9NQVBfTlVNQkVSWyRjaHJdKSl7CgkJCQl0aHJvdyBuZXcgUVJDb2RlRGF0YUV4Y2VwdGlvbihzcHJpbnRmKCdpbGxlZ2FsIGNoYXI6ICIlcyIgWyVkXScsICRjaHIsICRjKSk7CgkJCX0KCgkJCSRjICAgPSAkYyAtIDQ4OyAvLyBvcmQoJzAnKQoJCQkkbnVtID0gJG51bSAqIDEwICsgJGM7CgkJfQoKCQlyZXR1cm4gJG51bTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyMzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGEiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyMzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGEiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJEYXRhIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6MzA6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE51bWJlciI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMDoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTnVtYmVyIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiTnVtYmVyIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozNToiTnVtZXJpYyBtb2RlOiBkZWNpbWFsIGRpZ2l0cyAwIHRvIDkiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NjU6IklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguMy4yCklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguNC4yIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MjI6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGEiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjE6e3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjE7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJRUkRhdGFBYnN0cmFjdCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YToyOntzOjQxOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxOdW1iZXI6OiRkYXRhbW9kZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTnVtYmVyOjokZGF0YW1vZGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJkYXRhbW9kZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtOO3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjM4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpEQVRBX05VTUJFUiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE51bWJlcjo6JGxlbmd0aEJpdHMiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE51bWJlcjo6JGxlbmd0aEJpdHMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoibGVuZ3RoQml0cyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtOO3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjEyOiJbMTAsIDEyLCAxNF0iO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjI6e3M6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE51bWJlcjo6d3JpdGUoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXRkb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxOdW1iZXI6OndyaXRlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJ3cml0ZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJkYXRhIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTnVtYmVyOjpwYXJzZUludCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0MToiZ2V0IHRoZSBjb2RlIGZvciB0aGUgZ2l2ZW4gbnVtZXJpYyBzdHJpbmciO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFRocm93cyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxOToiUVJDb2RlRGF0YUV4Y2VwdGlvbiI7fX1zOjc6IgAqAG5hbWUiO3M6NjoidGhyb3dzIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozMzoib24gYW4gaWxsZWdhbCBjaGFyYWN0ZXIgb2NjdXJlbmNlIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTnVtYmVyOjpwYXJzZUludCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoicGFyc2VJbnQiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6Njoic3RyaW5nIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjYwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/B/Z/yudzLKt0Ng5wUPA9-r2g b/files/B/Z/yudzLKt0Ng5wUPA9-r2g
deleted file mode 100644
index c4a5538c0..000000000
--- a/files/B/Z/yudzLKt0Ng5wUPA9-r2g
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Aa3598badc79d62dd0a7188eed330d15f-341455e6590d16f6576adbe77785ad12
-s:16700:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjg6IkludGVyZmFjZSBRUk91dHB1dEludGVyZmFjZSwiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjE6IlFST3V0cHV0SW50ZXJmYWNlLnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjAyLjEyLjIwMTUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6NjoiU21pbGV5IjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjIxOiJzbWlsZXlAY2hpbGxlcmxhbi5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IjIwMTUgU21pbGV5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo1O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozOiJNSVQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czowOiIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjA6e319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6IjM0MTQ1NWU2NTkwZDE2ZjY1NzZhZGJlNzc3ODVhZDEyIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWUiO3M6MjE6IlFST3V0cHV0SW50ZXJmYWNlLnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjMyOiJzcmMvT3V0cHV0L1FST3V0cHV0SW50ZXJmYWNlLnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6MTU2NDoiPD9waHAKLyoqCiAqIEludGVyZmFjZSBRUk91dHB1dEludGVyZmFjZSwKICoKICogQGZpbGVzb3VyY2UgICBRUk91dHB1dEludGVyZmFjZS5waHAKICogQGNyZWF0ZWQgICAgICAwMi4xMi4yMDE1CiAqIEBwYWNrYWdlICAgICAgY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0CiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNSBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0OwoKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg7CgovKioKICogQ29udmVydHMgdGhlIGRhdGEgbWF0cml4IGludG8gcmVhZGFibGUgb3V0cHV0CiAqLwppbnRlcmZhY2UgUVJPdXRwdXRJbnRlcmZhY2V7CgoJY29uc3QgREVGQVVMVF9NT0RVTEVfVkFMVUVTID0gWwoJCS8vIGxpZ2h0CgkJUVJNYXRyaXg6Ok1fTlVMTCAgICAgICAgICAgID0+IGZhbHNlLCAvLyAwCgkJUVJNYXRyaXg6Ok1fREFUQSAgICAgICAgICAgID0+IGZhbHNlLCAvLyA0CgkJUVJNYXRyaXg6Ok1fRklOREVSICAgICAgICAgID0+IGZhbHNlLCAvLyA2CgkJUVJNYXRyaXg6Ok1fU0VQQVJBVE9SICAgICAgID0+IGZhbHNlLCAvLyA4CgkJUVJNYXRyaXg6Ok1fQUxJR05NRU5UICAgICAgID0+IGZhbHNlLCAvLyAxMAoJCVFSTWF0cml4OjpNX1RJTUlORyAgICAgICAgICA9PiBmYWxzZSwgLy8gMTIKCQlRUk1hdHJpeDo6TV9GT1JNQVQgICAgICAgICAgPT4gZmFsc2UsIC8vIDE0CgkJUVJNYXRyaXg6Ok1fVkVSU0lPTiAgICAgICAgID0+IGZhbHNlLCAvLyAxNgoJCVFSTWF0cml4OjpNX1FVSUVUWk9ORSAgICAgICA9PiBmYWxzZSwgLy8gMTgKCQlRUk1hdHJpeDo6TV9MT0dPICAgICAgICAgICAgPT4gZmFsc2UsIC8vIDIwCgkJUVJNYXRyaXg6Ok1fVEVTVCAgICAgICAgICAgID0+IGZhbHNlLCAvLyAyNTUKCQkvLyBkYXJrCgkJUVJNYXRyaXg6Ok1fREFSS01PRFVMRSA8PCA4ID0+IHRydWUsICAvLyA1MTIKCQlRUk1hdHJpeDo6TV9EQVRBIDw8IDggICAgICAgPT4gdHJ1ZSwgIC8vIDEwMjQKCQlRUk1hdHJpeDo6TV9GSU5ERVIgPDwgOCAgICAgPT4gdHJ1ZSwgIC8vIDE1MzYKCQlRUk1hdHJpeDo6TV9BTElHTk1FTlQgPDwgOCAgPT4gdHJ1ZSwgIC8vIDI1NjAKCQlRUk1hdHJpeDo6TV9USU1JTkcgPDwgOCAgICAgPT4gdHJ1ZSwgIC8vIDMwNzIKCQlRUk1hdHJpeDo6TV9GT1JNQVQgPDwgOCAgICAgPT4gdHJ1ZSwgIC8vIDM1ODQKCQlRUk1hdHJpeDo6TV9WRVJTSU9OIDw8IDggICAgPT4gdHJ1ZSwgIC8vIDQwOTYKCQlRUk1hdHJpeDo6TV9GSU5ERVJfRE9UIDw8IDggPT4gdHJ1ZSwgIC8vIDU2MzIKCQlRUk1hdHJpeDo6TV9URVNUIDw8IDggICAgICAgPT4gdHJ1ZSwgIC8vIDY1MjgwCgldOwoKCS8qKgoJICogZ2VuZXJhdGVzIHRoZSBvdXRwdXQsIG9wdGlvbmFsbHkgZHVtcHMgaXQgdG8gYSBmaWxlLCBhbmQgcmV0dXJucyBpdAoJICoKCSAqIEByZXR1cm4gbWl4ZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGR1bXAoc3RyaW5nICRmaWxlID0gbnVsbCk7Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6MjU6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyNToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjY6Ik91dHB1dCI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjE6e3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2UiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcSW50ZXJmYWNlXyI6Njp7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcSW50ZXJmYWNlXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0SW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTc6IlFST3V0cHV0SW50ZXJmYWNlIjt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcSW50ZXJmYWNlXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NDU6IkNvbnZlcnRzIHRoZSBkYXRhIG1hdHJpeCBpbnRvIHJlYWRhYmxlIG91dHB1dCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyNDoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YToxOntzOjg6IlFSTWF0cml4IjtzOjMxOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4Ijt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEludGVyZmFjZV8AY29uc3RhbnRzIjthOjE6e3M6NjY6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2U6OkRFRkFVTFRfTU9EVUxFX1ZBTFVFUyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2NjoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEludGVyZmFjZTo6REVGQVVMVF9NT0RVTEVfVkFMVUVTIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjE6IkRFRkFVTFRfTU9EVUxFX1ZBTFVFUyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtOO3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjE0MTY6IlsKICAgIC8vIGxpZ2h0CiAgICBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6TV9OVUxMID0+IGZhbHNlLAogICAgLy8gMAogICAgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fREFUQSA9PiBmYWxzZSwKICAgIC8vIDQKICAgIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX0ZJTkRFUiA9PiBmYWxzZSwKICAgIC8vIDYKICAgIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX1NFUEFSQVRPUiA9PiBmYWxzZSwKICAgIC8vIDgKICAgIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX0FMSUdOTUVOVCA9PiBmYWxzZSwKICAgIC8vIDEwCiAgICBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6TV9USU1JTkcgPT4gZmFsc2UsCiAgICAvLyAxMgogICAgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fRk9STUFUID0+IGZhbHNlLAogICAgLy8gMTQKICAgIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX1ZFUlNJT04gPT4gZmFsc2UsCiAgICAvLyAxNgogICAgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fUVVJRVRaT05FID0+IGZhbHNlLAogICAgLy8gMTgKICAgIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX0xPR08gPT4gZmFsc2UsCiAgICAvLyAyMAogICAgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fVEVTVCA9PiBmYWxzZSwKICAgIC8vIDI1NQogICAgLy8gZGFyawogICAgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fREFSS01PRFVMRSA8PCA4ID0+IHRydWUsCiAgICAvLyA1MTIKICAgIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX0RBVEEgPDwgOCA9PiB0cnVlLAogICAgLy8gMTAyNAogICAgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fRklOREVSIDw8IDggPT4gdHJ1ZSwKICAgIC8vIDE1MzYKICAgIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX0FMSUdOTUVOVCA8PCA4ID0+IHRydWUsCiAgICAvLyAyNTYwCiAgICBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6TV9USU1JTkcgPDwgOCA9PiB0cnVlLAogICAgLy8gMzA3MgogICAgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fRk9STUFUIDw8IDggPT4gdHJ1ZSwKICAgIC8vIDM1ODQKICAgIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX1ZFUlNJT04gPDwgOCA9PiB0cnVlLAogICAgLy8gNDA5NgogICAgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fRklOREVSX0RPVCA8PCA4ID0+IHRydWUsCiAgICAvLyA1NjMyCiAgICBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6TV9URVNUIDw8IDggPT4gdHJ1ZSwKXSI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX19czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcSW50ZXJmYWNlXwBtZXRob2RzIjthOjE6e3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2U6OmR1bXAoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Njc6ImdlbmVyYXRlcyB0aGUgb3V0cHV0LCBvcHRpb25hbGx5IGR1bXBzIGl0IHRvIGEgZmlsZSwgYW5kIHJldHVybnMgaXQiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njk7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2U6OmR1bXAoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6ImR1bXAiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoiZmlsZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtzOjQ6Im51bGwiO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fX19czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcSW50ZXJmYWNlXwBwYXJlbnRzIjthOjA6e31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxJbnRlcmZhY2VfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/C/E/REX+M9WtxNjLvEiM3UTg b/files/C/E/REX+M9WtxNjLvEiM3UTg
deleted file mode 100644
index 35800f9cc..000000000
--- a/files/C/E/REX+M9WtxNjLvEiM3UTg
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A8ff9f516ac8e54a3b2246fa2744d92d7-bd2d5a1a70882f338d4c49fed40cd38d
-s:16000:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTA6IkNsYXNzIEJ5dGUiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6ODoiQnl0ZS5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIyNS4xMS4yMDE1IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyMjoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNSBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiYmQyZDVhMWE3MDg4MmYzMzhkNGM0OWZlZDQwY2QzOGQiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czo4OiJCeXRlLnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjE3OiJzcmMvRGF0YS9CeXRlLnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6NzM3OiI8P3BocAovKioKICogQ2xhc3MgQnl0ZQogKgogKiBAZmlsZXNvdXJjZSAgIEJ5dGUucGhwCiAqIEBjcmVhdGVkICAgICAgMjUuMTEuMjAxNQogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlXERhdGEKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxEYXRhOwoKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTsKCnVzZSBmdW5jdGlvbiBvcmQ7CgovKioKICogQnl0ZSBtb2RlLCBJU08tODg1OS0xIG9yIFVURi04CiAqCiAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguMy40CiAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguNC40CiAqLwpmaW5hbCBjbGFzcyBCeXRlIGV4dGVuZHMgUVJEYXRhQWJzdHJhY3R7CgoJcHJvdGVjdGVkIGludCAkZGF0YW1vZGUgPSBRUkNvZGU6OkRBVEFfQllURTsKCglwcm90ZWN0ZWQgYXJyYXkgJGxlbmd0aEJpdHMgPSBbOCwgMTYsIDE2XTsKCgkvKioKCSAqIEBpbmhlcml0ZG9jCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiB3cml0ZShzdHJpbmcgJGRhdGEpOnZvaWR7CgkJJGkgPSAwOwoKCQl3aGlsZSgkaSA8ICR0aGlzLT5zdHJsZW4pewoJCQkkdGhpcy0+Yml0QnVmZmVyLT5wdXQob3JkKCRkYXRhWyRpXSksIDgpOwoJCQkkaSsrOwoJCX0KCgl9Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6MjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiRGF0YSI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjI4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxCeXRlIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTE6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxCeXRlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiQnl0ZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzA6IkJ5dGUgbW9kZSwgSVNPLTg4NTktMSBvciBVVEYtOCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo2NToiSVNPL0lFQyAxODAwNDoyMDAwIFNlY3Rpb24gOC4zLjQKSVNPL0lFQyAxODAwNDoyMDAwIFNlY3Rpb24gOC40LjQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyMjoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MTp7czo2OiJRUkNvZGUiO3M6MjQ6ImNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZSI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZmluYWwiO2I6MTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcGFyZW50IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzg6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUFic3RyYWN0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTQ6IlFSRGF0YUFic3RyYWN0Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjI6e3M6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEJ5dGU6OiRkYXRhbW9kZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcQnl0ZTo6JGRhdGFtb2RlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiZGF0YW1vZGUiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TjtzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czozNjoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6REFUQV9CWVRFIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo0MToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcQnl0ZTo6JGxlbmd0aEJpdHMiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEJ5dGU6OiRsZW5ndGhCaXRzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6Imxlbmd0aEJpdHMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TjtzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoxMToiWzgsIDE2LCAxNl0iO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjE6e3M6Mzc6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEJ5dGU6OndyaXRlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0ZG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcQnl0ZTo6d3JpdGUoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6IndyaXRlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImRhdGEiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/H/E/q3D8ItUWm7MUuYVXkSKw b/files/H/E/q3D8ItUWm7MUuYVXkSKw
deleted file mode 100644
index 330f259f1..000000000
--- a/files/H/E/q3D8ItUWm7MUuYVXkSKw
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A1f67fbce112198c37c55fe3ebdfe2599-74482118be419d1e958a5d687120b2a5
-s:184444:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTQ6IkNsYXNzIFFSTWF0cml4IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjY6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEyOiJRUk1hdHJpeC5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIxNS4xMS4yMDE3IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyMjoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNyBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiNzQ0ODIxMThiZTQxOWQxZTk1OGE1ZDY4NzEyMGIyYTUiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxMjoiUVJNYXRyaXgucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6MjE6InNyYy9EYXRhL1FSTWF0cml4LnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6MTc5ODU6Ijw/cGhwCi8qKgogKiBDbGFzcyBRUk1hdHJpeAogKgogKiBAZmlsZXNvdXJjZSAgIFFSTWF0cml4LnBocAogKiBAY3JlYXRlZCAgICAgIDE1LjExLjIwMTcKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVxEYXRhCiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVcRGF0YTsKCnVzZSBjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU7CnVzZSBDbG9zdXJlOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2ZpbGwsIGFycmF5X2tleV9leGlzdHMsIGFycmF5X3B1c2gsIGFycmF5X3Vuc2hpZnQsIGNvdW50LCBmbG9vciwgaW5fYXJyYXksIG1heCwgbWluLCByYW5nZTsKCi8qKgogKiBIb2xkcyBhIG51bWVyaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmluYWwgUVIgQ29kZTsKICogbWFwcyB0aGUgRUNDIGNvZGVkIGJpbmFyeSBkYXRhIGFuZCBhcHBsaWVzIHRoZSBtYXNrIHBhdHRlcm4KICoKICogQHNlZSBodHRwOi8vd3d3LnRob25reS5jb20vcXItY29kZS10dXRvcmlhbC9mb3JtYXQtdmVyc2lvbi1pbmZvcm1hdGlvbgogKi8KZmluYWwgY2xhc3MgUVJNYXRyaXh7CgoJLyoqIEB2YXIgaW50ICovCglwdWJsaWMgY29uc3QgTV9OVUxMICAgICAgID0gMHgwMDsKCS8qKiBAdmFyIGludCAqLwoJcHVibGljIGNvbnN0IE1fREFSS01PRFVMRSA9IDB4MDI7CgkvKiogQHZhciBpbnQgKi8KCXB1YmxpYyBjb25zdCBNX0RBVEEgICAgICAgPSAweDA0OwoJLyoqIEB2YXIgaW50ICovCglwdWJsaWMgY29uc3QgTV9GSU5ERVIgICAgID0gMHgwNjsKCS8qKiBAdmFyIGludCAqLwoJcHVibGljIGNvbnN0IE1fU0VQQVJBVE9SICA9IDB4MDg7CgkvKiogQHZhciBpbnQgKi8KCXB1YmxpYyBjb25zdCBNX0FMSUdOTUVOVCAgPSAweDBhOwoJLyoqIEB2YXIgaW50ICovCglwdWJsaWMgY29uc3QgTV9USU1JTkcgICAgID0gMHgwYzsKCS8qKiBAdmFyIGludCAqLwoJcHVibGljIGNvbnN0IE1fRk9STUFUICAgICA9IDB4MGU7CgkvKiogQHZhciBpbnQgKi8KCXB1YmxpYyBjb25zdCBNX1ZFUlNJT04gICAgPSAweDEwOwoJLyoqIEB2YXIgaW50ICovCglwdWJsaWMgY29uc3QgTV9RVUlFVFpPTkUgID0gMHgxMjsKCS8qKiBAdmFyIGludCAqLwoJcHVibGljIGNvbnN0IE1fTE9HTyAgICAgICA9IDB4MTQ7CgkvKiogQHZhciBpbnQgKi8KCXB1YmxpYyBjb25zdCBNX0ZJTkRFUl9ET1QgPSAweDE2OwoJLyoqIEB2YXIgaW50ICovCglwdWJsaWMgY29uc3QgTV9URVNUICAgICAgID0gMHhmZjsKCgkvKioKCSAqIElTTy9JRUMgMTgwMDQ6MjAwMCBBbm5leCBFLCBUYWJsZSBFLjEgLSBSb3cvY29sdW1uIGNvb3JkaW5hdGVzIG9mIGNlbnRlciBtb2R1bGUgb2YgQWxpZ25tZW50IFBhdHRlcm5zCgkgKgoJICogdmVyc2lvbiAtPiBwYXR0ZXJuCgkgKgoJICogQHZhciBpbnRbXVtdCgkgKi8KCXByb3RlY3RlZCBjb25zdCBhbGlnbm1lbnRQYXR0ZXJuID0gWwoJCTEgID0+IFtdLAoJCTIgID0+IFs2LCAxOF0sCgkJMyAgPT4gWzYsIDIyXSwKCQk0ICA9PiBbNiwgMjZdLAoJCTUgID0+IFs2LCAzMF0sCgkJNiAgPT4gWzYsIDM0XSwKCQk3ICA9PiBbNiwgMjIsIDM4XSwKCQk4ICA9PiBbNiwgMjQsIDQyXSwKCQk5ICA9PiBbNiwgMjYsIDQ2XSwKCQkxMCA9PiBbNiwgMjgsIDUwXSwKCQkxMSA9PiBbNiwgMzAsIDU0XSwKCQkxMiA9PiBbNiwgMzIsIDU4XSwKCQkxMyA9PiBbNiwgMzQsIDYyXSwKCQkxNCA9PiBbNiwgMjYsIDQ2LCA2Nl0sCgkJMTUgPT4gWzYsIDI2LCA0OCwgNzBdLAoJCTE2ID0+IFs2LCAyNiwgNTAsIDc0XSwKCQkxNyA9PiBbNiwgMzAsIDU0LCA3OF0sCgkJMTggPT4gWzYsIDMwLCA1NiwgODJdLAoJCTE5ID0+IFs2LCAzMCwgNTgsIDg2XSwKCQkyMCA9PiBbNiwgMzQsIDYyLCA5MF0sCgkJMjEgPT4gWzYsIDI4LCA1MCwgNzIsICA5NF0sCgkJMjIgPT4gWzYsIDI2LCA1MCwgNzQsICA5OF0sCgkJMjMgPT4gWzYsIDMwLCA1NCwgNzgsIDEwMl0sCgkJMjQgPT4gWzYsIDI4LCA1NCwgODAsIDEwNl0sCgkJMjUgPT4gWzYsIDMyLCA1OCwgODQsIDExMF0sCgkJMjYgPT4gWzYsIDMwLCA1OCwgODYsIDExNF0sCgkJMjcgPT4gWzYsIDM0LCA2MiwgOTAsIDExOF0sCgkJMjggPT4gWzYsIDI2LCA1MCwgNzQsICA5OCwgMTIyXSwKCQkyOSA9PiBbNiwgMzAsIDU0LCA3OCwgMTAyLCAxMjZdLAoJCTMwID0+IFs2LCAyNiwgNTIsIDc4LCAxMDQsIDEzMF0sCgkJMzEgPT4gWzYsIDMwLCA1NiwgODIsIDEwOCwgMTM0XSwKCQkzMiA9PiBbNiwgMzQsIDYwLCA4NiwgMTEyLCAxMzhdLAoJCTMzID0+IFs2LCAzMCwgNTgsIDg2LCAxMTQsIDE0Ml0sCgkJMzQgPT4gWzYsIDM0LCA2MiwgOTAsIDExOCwgMTQ2XSwKCQkzNSA9PiBbNiwgMzAsIDU0LCA3OCwgMTAyLCAxMjYsIDE1MF0sCgkJMzYgPT4gWzYsIDI0LCA1MCwgNzYsIDEwMiwgMTI4LCAxNTRdLAoJCTM3ID0+IFs2LCAyOCwgNTQsIDgwLCAxMDYsIDEzMiwgMTU4XSwKCQkzOCA9PiBbNiwgMzIsIDU4LCA4NCwgMTEwLCAxMzYsIDE2Ml0sCgkJMzkgPT4gWzYsIDI2LCA1NCwgODIsIDExMCwgMTM4LCAxNjZdLAoJCTQwID0+IFs2LCAzMCwgNTgsIDg2LCAxMTQsIDE0MiwgMTcwXSwKCV07CgoJLyoqCgkgKiBJU08vSUVDIDE4MDA0OjIwMDAgQW5uZXggRCwgVGFibGUgRC4xIC0gVmVyc2lvbiBpbmZvcm1hdGlvbiBiaXQgc3RyZWFtIGZvciBlYWNoIHZlcnNpb24KCSAqCgkgKiBubyB2ZXJzaW9uIHBhdHRlcm4gZm9yIFFSIENvZGVzIDwgNwoJICoKCSAqIEB2YXIgaW50W10KCSAqLwoJcHJvdGVjdGVkIGNvbnN0IHZlcnNpb25QYXR0ZXJuID0gWwoJCTcgID0+IDBiMDAwMTExMTEwMDEwMDEwMTAwLAoJCTggID0+IDBiMDAxMDAwMDEwMTEwMTExMTAwLAoJCTkgID0+IDBiMDAxMDAxMTAxMDEwMDExMDAxLAoJCTEwID0+IDBiMDAxMDEwMDEwMDExMDEwMDExLAoJCTExID0+IDBiMDAxMDExMTAxMTExMTEwMTEwLAoJCTEyID0+IDBiMDAxMTAwMDExMTAxMTAwMDEwLAoJCTEzID0+IDBiMDAxMTAxMTAwMDAxMDAwMTExLAoJCTE0ID0+IDBiMDAxMTEwMDExMDAwMDAxMTAxLAoJCTE1ID0+IDBiMDAxMTExMTAwMTAwMTAxMDAwLAoJCTE2ID0+IDBiMDEwMDAwMTAxMTAxMTExMDAwLAoJCTE3ID0+IDBiMDEwMDAxMDEwMDAxMDExMTAxLAoJCTE4ID0+IDBiMDEwMDEwMTAxMDAwMDEwMTExLAoJCTE5ID0+IDBiMDEwMDExMDEwMTAwMTEwMDEwLAoJCTIwID0+IDBiMDEwMTAwMTAwMTEwMTAwMTEwLAoJCTIxID0+IDBiMDEwMTAxMDExMDEwMDAwMDExLAoJCTIyID0+IDBiMDEwMTEwMTAwMDExMDAxMDAxLAoJCTIzID0+IDBiMDEwMTExMDExMTExMTAxMTAwLAoJCTI0ID0+IDBiMDExMDAwMTExMDExMDAwMTAwLAoJCTI1ID0+IDBiMDExMDAxMDAwMTExMTAwMDAxLAoJCTI2ID0+IDBiMDExMDEwMTExMTEwMTAxMDExLAoJCTI3ID0+IDBiMDExMDExMDAwMDEwMDAxMTEwLAoJCTI4ID0+IDBiMDExMTAwMTEwMDAwMDExMDEwLAoJCTI5ID0+IDBiMDExMTAxMDAxMTAwMTExMTExLAoJCTMwID0+IDBiMDExMTEwMTEwMTAxMTEwMTAxLAoJCTMxID0+IDBiMDExMTExMDAxMDAxMDEwMDAwLAoJCTMyID0+IDBiMTAwMDAwMTAwMTExMDEwMTAxLAoJCTMzID0+IDBiMTAwMDAxMDExMDExMTEwMDAwLAoJCTM0ID0+IDBiMTAwMDEwMTAwMDEwMTExMDEwLAoJCTM1ID0+IDBiMTAwMDExMDExMTEwMDExMTExLAoJCTM2ID0+IDBiMTAwMTAwMTAxMTAwMDAxMDExLAoJCTM3ID0+IDBiMTAwMTAxMDEwMDAwMTAxMTEwLAoJCTM4ID0+IDBiMTAwMTEwMTAxMDAxMTAwMTAwLAoJCTM5ID0+IDBiMTAwMTExMDEwMTAxMDAwMDAxLAoJCTQwID0+IDBiMTAxMDAwMTEwMDAxMTAxMDAxLAoJXTsKCgkvKioKCSAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguOSAtIEZvcm1hdCBJbmZvcm1hdGlvbgoJICoKCSAqIEVDQyBsZXZlbCAtPiBtYXNrIHBhdHRlcm4KCSAqCgkgKiBAdmFyIGludFtdW10KCSAqLwoJcHJvdGVjdGVkIGNvbnN0IGZvcm1hdFBhdHRlcm4gPSBbCgkJWyAvLyBMCgkJCTBiMTExMDExMTExMDAwMTAwLAoJCQkwYjExMTAwMTAxMTExMDAxMSwKCQkJMGIxMTExMTAxMTAxMDEwMTAsCgkJCTBiMTExMTAwMDEwMDExMTAxLAoJCQkwYjExMDAxMTAwMDEwMTExMSwKCQkJMGIxMTAwMDExMDAwMTEwMDAsCgkJCTBiMTEwMTEwMDAxMDAwMDAxLAoJCQkwYjExMDEwMDEwMTExMDExMCwKCQldLAoJCVsgLy8gTQoJCQkwYjEwMTAxMDAwMDAxMDAxMCwKCQkJMGIxMDEwMDAxMDAxMDAxMDEsCgkJCTBiMTAxMTExMDAxMTExMTAwLAoJCQkwYjEwMTEwMTEwMTAwMTAxMSwKCQkJMGIxMDAwMTAxMTExMTEwMDEsCgkJCTBiMTAwMDAwMDExMDAxMTEwLAoJCQkwYjEwMDExMTExMDAxMDExMSwKCQkJMGIxMDAxMDEwMTAxMDAwMDAsCgkJXSwKCQlbIC8vIFEKCQkJMGIwMTEwMTAxMDEwMTExMTEsCgkJCTBiMDExMDAwMDAxMTAxMDAwLAoJCQkwYjAxMTExMTEwMDExMDAwMSwKCQkJMGIwMTExMDEwMDAwMDAxMTAsCgkJCTBiMDEwMDEwMDEwMTEwMTAwLAoJCQkwYjAxMDAwMDExMDAwMDAxMSwKCQkJMGIwMTAxMTEwMTEwMTEwMTAsCgkJCTBiMDEwMTAxMTExMTAxMTAxLAoJCV0sCgkJWyAvLyBICgkJCTBiMDAxMDExMDEwMDAxMDAxLAoJCQkwYjAwMTAwMTExMDExMTExMCwKCQkJMGIwMDExMTAwMTExMDAxMTEsCgkJCTBiMDAxMTAwMTExMDEwMDAwLAoJCQkwYjAwMDAxMTEwMTEwMDAxMCwKCQkJMGIwMDAwMDEwMDEwMTAxMDEsCgkJCTBiMDAwMTEwMTAwMDAxMTAwLAoJCQkwYjAwMDEwMDAwMDExMTAxMSwKCQldLAoJXTsKCgkvKioKCSAqIHRoZSBjdXJyZW50IFFSIENvZGUgdmVyc2lvbiBudW1iZXIKCSAqLwoJcHJvdGVjdGVkIGludCAkdmVyc2lvbjsKCgkvKioKCSAqIHRoZSBjdXJyZW50IEVDQyBsZXZlbAoJICovCglwcm90ZWN0ZWQgaW50ICRlY2xldmVsOwoKCS8qKgoJICogdGhlIHVzZWQgbWFzayBwYXR0ZXJuLCBzZXQgdmlhIFFSTWF0cml4OjptYXBEYXRhKCkKCSAqLwoJcHJvdGVjdGVkIGludCAkbWFza1BhdHRlcm4gPSBRUkNvZGU6Ok1BU0tfUEFUVEVSTl9BVVRPOwoKCS8qKgoJICogdGhlIHNpemUgKHNpZGUgbGVuZ3RoKSBvZiB0aGUgbWF0cml4CgkgKi8KCXByb3RlY3RlZCBpbnQgJG1vZHVsZUNvdW50OwoKCS8qKgoJICogdGhlIGFjdHVhbCBtYXRyaXggZGF0YSBhcnJheQoJICoKCSAqIEB2YXIgaW50W11bXQoJICovCglwcm90ZWN0ZWQgYXJyYXkgJG1hdHJpeDsKCgkvKioKCSAqIFFSTWF0cml4IGNvbnN0cnVjdG9yLgoJICoKCSAqIEB0aHJvd3MgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJDb2RlRGF0YUV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICR2ZXJzaW9uLCBpbnQgJGVjbGV2ZWwpewoKCQlpZighaW5fYXJyYXkoJHZlcnNpb24sIHJhbmdlKDEsIDQwKSwgdHJ1ZSkpewoJCQl0aHJvdyBuZXcgUVJDb2RlRGF0YUV4Y2VwdGlvbignaW52YWxpZCBRUiBDb2RlIHZlcnNpb24nKTsKCQl9CgoJCWlmKCFhcnJheV9rZXlfZXhpc3RzKCRlY2xldmVsLCBRUkNvZGU6OkVDQ19NT0RFUykpewoJCQl0aHJvdyBuZXcgUVJDb2RlRGF0YUV4Y2VwdGlvbignaW52YWxpZCBlY2MgbGV2ZWwnKTsKCQl9CgoJCSR0aGlzLT52ZXJzaW9uICAgICA9ICR2ZXJzaW9uOwoJCSR0aGlzLT5lY2xldmVsICAgICA9ICRlY2xldmVsOwoJCSR0aGlzLT5tb2R1bGVDb3VudCA9ICR0aGlzLT52ZXJzaW9uICogNCArIDE3OwoJCSR0aGlzLT5tYXRyaXggICAgICA9IGFycmF5X2ZpbGwoMCwgJHRoaXMtPm1vZHVsZUNvdW50LCBhcnJheV9maWxsKDAsICR0aGlzLT5tb2R1bGVDb3VudCwgJHRoaXM6Ok1fTlVMTCkpOwoJfQoKCS8qKgoJICogc2hvcnRjdXQgdG8gaW5pdGlhbGl6ZSB0aGUgbWF0cml4CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpbml0KGludCAkbWFza1BhdHRlcm4sIGJvb2wgJHRlc3QgPSBudWxsKTpRUk1hdHJpeHsKCQlyZXR1cm4gJHRoaXMKCQkJLT5zZXRGaW5kZXJQYXR0ZXJuKCkKCQkJLT5zZXRTZXBhcmF0b3JzKCkKCQkJLT5zZXRBbGlnbm1lbnRQYXR0ZXJuKCkKCQkJLT5zZXRUaW1pbmdQYXR0ZXJuKCkKCQkJLT5zZXRWZXJzaW9uTnVtYmVyKCR0ZXN0KQoJCQktPnNldEZvcm1hdEluZm8oJG1hc2tQYXR0ZXJuLCAkdGVzdCkKCQkJLT5zZXREYXJrTW9kdWxlKCkKCQk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBkYXRhIG1hdHJpeCwgcmV0dXJucyBhIHB1cmUgYm9vbGVhbiByZXByZXNlbnRhdGlvbiBpZiAkYm9vbGVhbiBpcyBzZXQgdG8gdHJ1ZQoJICoKCSAqIEByZXR1cm4gaW50W11bXXxib29sW11bXQoJICovCglwdWJsaWMgZnVuY3Rpb24gbWF0cml4KGJvb2wgJGJvb2xlYW4gPSBmYWxzZSk6YXJyYXl7CgoJCWlmKCEkYm9vbGVhbil7CgkJCXJldHVybiAkdGhpcy0+bWF0cml4OwoJCX0KCgkJJG1hdHJpeCA9IFtdOwoKCQlmb3JlYWNoKCR0aGlzLT5tYXRyaXggYXMgJHkgPT4gJHJvdyl7CgkJCSRtYXRyaXhbJHldID0gW107CgoJCQlmb3JlYWNoKCRyb3cgYXMgJHggPT4gJHZhbCl7CgkJCQkkbWF0cml4WyR5XVskeF0gPSAoJHZhbCA+PiA4KSA+IDA7CgkJCX0KCQl9CgoJCXJldHVybiAkbWF0cml4OwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gdmVyc2lvbigpOmludHsKCQlyZXR1cm4gJHRoaXMtPnZlcnNpb247Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IEVDQyBsZXZlbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZWNjTGV2ZWwoKTppbnR7CgkJcmV0dXJuICR0aGlzLT5lY2xldmVsOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgY3VycmVudCBtYXNrIHBhdHRlcm4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIG1hc2tQYXR0ZXJuKCk6aW50ewoJCXJldHVybiAkdGhpcy0+bWFza1BhdHRlcm47Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBhYnNvdWx1dGUgc2l6ZSBvZiB0aGUgbWF0cml4LCBpbmNsdWRpbmcgcXVpZXQgem9uZSAoYWZ0ZXIgc2V0dGluZyBpdCkuCgkgKgoJICogc2l6ZSA9IHZlcnNpb24gKiA0ICsgMTcgWyArIDIgKiBxdWlldHpvbmUgc2l6ZV0KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNpemUoKTppbnR7CgkJcmV0dXJuICR0aGlzLT5tb2R1bGVDb3VudDsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBtb2R1bGUgYXQgcG9zaXRpb24gWyR4LCAkeV0KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldChpbnQgJHgsIGludCAkeSk6aW50ewoJCXJldHVybiAkdGhpcy0+bWF0cml4WyR5XVskeF07Cgl9CgoJLyoqCgkgKiBTZXRzIHRoZSAkTV9UWVBFIHZhbHVlIGZvciB0aGUgbW9kdWxlIGF0IHBvc2l0aW9uIFskeCwgJHldCgkgKgoJICogICB0cnVlICA9PiAkTV9UWVBFIDw8IDgKCSAqICAgZmFsc2UgPT4gJE1fVFlQRQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0KGludCAkeCwgaW50ICR5LCBib29sICR2YWx1ZSwgaW50ICRNX1RZUEUpOlFSTWF0cml4ewoJCSR0aGlzLT5tYXRyaXhbJHldWyR4XSA9ICRNX1RZUEUgPDwgKCR2YWx1ZSA/IDggOiAwKTsKCgkJcmV0dXJuICR0aGlzOwoJfQoKCS8qKgoJICogQ2hlY2tzIHdoZXRoZXIgYSBtb2R1bGUgaXMgdHJ1ZSAoZGFyaykgb3IgZmFsc2UgKGxpZ2h0KQoJICoKCSAqICAgdHJ1ZSAgPT4gJHZhbHVlID4+IDggPT09ICRNX1RZUEUKCSAqICAgICAgICAgICAgJHZhbHVlID4+IDggPiAwCgkgKgoJICogICBmYWxzZSA9PiAkdmFsdWUgPT09ICRNX1RZUEUKCSAqICAgICAgICAgICAgJHZhbHVlID4+IDggPT09IDAKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNoZWNrKGludCAkeCwgaW50ICR5KTpib29sewoJCXJldHVybiAoJHRoaXMtPm1hdHJpeFskeV1bJHhdID4+IDgpID4gMDsKCX0KCgoJLyoqCgkgKiBTZXRzIHRoZSAiZGFyayBtb2R1bGUiLCB0aGF0IGlzIGFsd2F5cyBvbiB0aGUgc2FtZSBwb3NpdGlvbiAxeDFweCBhd2F5IGZyb20gdGhlIGJvdHRvbSBsZWZ0IGZpbmRlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0RGFya01vZHVsZSgpOlFSTWF0cml4ewoJCSR0aGlzLT5zZXQoOCwgNCAqICR0aGlzLT52ZXJzaW9uICsgOSwgdHJ1ZSwgJHRoaXM6Ok1fREFSS01PRFVMRSk7CgoJCXJldHVybiAkdGhpczsKCX0KCgkvKioKCSAqIERyYXdzIHRoZSA3eDcgZmluZGVyIHBhdHRlcm5zIGluIHRoZSBjb3JuZXJzIHRvcCBsZWZ0L3JpZ2h0IGFuZCBib3R0b20gbGVmdAoJICoKCSAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDcuMy4yCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRGaW5kZXJQYXR0ZXJuKCk6UVJNYXRyaXh7CgoJCSRwb3MgPSBbCgkJCVswLCAwXSwgLy8gdG9wIGxlZnQKCQkJWyR0aGlzLT5tb2R1bGVDb3VudCAtIDcsIDBdLCAvLyBib3R0b20gbGVmdAoJCQlbMCwgJHRoaXMtPm1vZHVsZUNvdW50IC0gN10sIC8vIHRvcCByaWdodAoJCV07CgoJCWZvcmVhY2goJHBvcyBhcyAkYyl7CgkJCWZvcigkeSA9IDA7ICR5IDwgNzsgJHkrKyl7CgkJCQlmb3IoJHggPSAwOyAkeCA8IDc7ICR4KyspewoJCQkJCS8vIG91dGVyIChkYXJrKSA3Kjcgc3F1YXJlCgkJCQkJaWYoJHggPT09IDAgfHwgJHggPT09IDYgfHwgJHkgPT09IDAgfHwgJHkgPT09IDYpewoJCQkJCQkkdGhpcy0+c2V0KCRjWzBdICsgJHksICRjWzFdICsgJHgsIHRydWUsICR0aGlzOjpNX0ZJTkRFUik7CgkJCQkJfQoJCQkJCS8vIGlubmVyIChsaWdodCkgNSo1IHNxdWFyZQoJCQkJCWVsc2VpZigkeCA9PT0gMSB8fCAkeCA9PT0gNSB8fCAkeSA9PT0gMSB8fCAkeSA9PT0gNSl7CgkJCQkJCSR0aGlzLT5zZXQoJGNbMF0gKyAkeSwgJGNbMV0gKyAkeCwgZmFsc2UsICR0aGlzOjpNX0ZJTkRFUik7CgkJCQkJfQoJCQkJCS8vIDMqMyBkb3QKCQkJCQllbHNlewoJCQkJCQkkdGhpcy0+c2V0KCRjWzBdICsgJHksICRjWzFdICsgJHgsIHRydWUsICR0aGlzOjpNX0ZJTkRFUl9ET1QpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuICR0aGlzOwoJfQoKCS8qKgoJICogRHJhd3MgdGhlIHNlcGFyYXRvciBsaW5lcyBhcm91bmQgdGhlIGZpbmRlciBwYXR0ZXJucwoJICoKCSAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDcuMy4zCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRTZXBhcmF0b3JzKCk6UVJNYXRyaXh7CgoJCSRoID0gWwoJCQlbNywgMF0sCgkJCVskdGhpcy0+bW9kdWxlQ291bnQgLSA4LCAwXSwKCQkJWzcsICR0aGlzLT5tb2R1bGVDb3VudCAtIDhdLAoJCV07CgoJCSR2ID0gWwoJCQlbNywgN10sCgkJCVskdGhpcy0+bW9kdWxlQ291bnQgLSAxLCA3XSwKCQkJWzcsICR0aGlzLT5tb2R1bGVDb3VudCAtIDhdLAoJCV07CgoJCWZvcigkYyA9IDA7ICRjIDwgMzsgJGMrKyl7CgkJCWZvcigkaSA9IDA7ICRpIDwgODsgJGkrKyl7CgkJCQkkdGhpcy0+c2V0KCRoWyRjXVswXSAgICAgLCAkaFskY11bMV0gKyAkaSwgZmFsc2UsICR0aGlzOjpNX1NFUEFSQVRPUik7CgkJCQkkdGhpcy0+c2V0KCR2WyRjXVswXSAtICRpLCAkdlskY11bMV0gICAgICwgZmFsc2UsICR0aGlzOjpNX1NFUEFSQVRPUik7CgkJCX0KCQl9CgoJCXJldHVybiAkdGhpczsKCX0KCgoJLyoqCgkgKiBEcmF3cyB0aGUgNXg1IGFsaWdubWVudCBwYXR0ZXJucwoJICoKCSAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDcuMy41CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRBbGlnbm1lbnRQYXR0ZXJuKCk6UVJNYXRyaXh7CgoJCWZvcmVhY2goJHRoaXM6OmFsaWdubWVudFBhdHRlcm5bJHRoaXMtPnZlcnNpb25dIGFzICR5KXsKCQkJZm9yZWFjaCgkdGhpczo6YWxpZ25tZW50UGF0dGVyblskdGhpcy0+dmVyc2lvbl0gYXMgJHgpewoKCQkJCS8vIHNraXAgZXhpc3RpbmcgcGF0dGVybnMKCQkJCWlmKCR0aGlzLT5tYXRyaXhbJHldWyR4XSAhPT0gJHRoaXM6Ok1fTlVMTCl7CgkJCQkJY29udGludWU7CgkJCQl9CgoJCQkJZm9yKCRyeSA9IC0yOyAkcnkgPD0gMjsgJHJ5KyspewoJCQkJCWZvcigkcnggPSAtMjsgJHJ4IDw9IDI7ICRyeCsrKXsKCQkJCQkJJHYgPSAoJHJ5ID09PSAwICYmICRyeCA9PT0gMCkgfHwgJHJ5ID09PSAyIHx8ICRyeSA9PT0gLTIgfHwgJHJ4ID09PSAyIHx8ICRyeCA9PT0gLTI7CgoJCQkJCQkkdGhpcy0+c2V0KCR4ICsgJHJ4LCAkeSArICRyeSwgJHYsICR0aGlzOjpNX0FMSUdOTUVOVCk7CgkJCQkJfQoJCQkJfQoKCQkJfQoJCX0KCgkJcmV0dXJuICR0aGlzOwoJfQoKCgkvKioKCSAqIERyYXdzIHRoZSB0aW1pbmcgcGF0dGVybiAoaC92IGNoZWNrZXJlZCBsaW5lIGJldHdlZW4gdGhlIGZpbmRlciBwYXR0ZXJucykKCSAqCgkgKiBJU08vSUVDIDE4MDA0OjIwMDAgU2VjdGlvbiA3LjMuNAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0VGltaW5nUGF0dGVybigpOlFSTWF0cml4ewoKCQlmb3JlYWNoKHJhbmdlKDgsICR0aGlzLT5tb2R1bGVDb3VudCAtIDggLSAxKSBhcyAkaSl7CgoJCQlpZigkdGhpcy0+bWF0cml4WzZdWyRpXSAhPT0gJHRoaXM6Ok1fTlVMTCB8fCAkdGhpcy0+bWF0cml4WyRpXVs2XSAhPT0gJHRoaXM6Ok1fTlVMTCl7CgkJCQljb250aW51ZTsKCQkJfQoKCQkJJHYgPSAkaSAlIDIgPT09IDA7CgoJCQkkdGhpcy0+c2V0KCRpLCA2LCAkdiwgJHRoaXM6Ok1fVElNSU5HKTsgLy8gaAoJCQkkdGhpcy0+c2V0KDYsICRpLCAkdiwgJHRoaXM6Ok1fVElNSU5HKTsgLy8gdgoJCX0KCgkJcmV0dXJuICR0aGlzOwoJfQoKCS8qKgoJICogRHJhd3MgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24sIDJ4IDN4NiBwaXhlbAoJICoKCSAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguMTAKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldFZlcnNpb25OdW1iZXIoYm9vbCAkdGVzdCA9IG51bGwpOlFSTWF0cml4ewoJCSRiaXRzID0gJHRoaXM6OnZlcnNpb25QYXR0ZXJuWyR0aGlzLT52ZXJzaW9uXSA/PyBmYWxzZTsKCgkJaWYoJGJpdHMgIT09IGZhbHNlKXsKCgkJCWZvcigkaSA9IDA7ICRpIDwgMTg7ICRpKyspewoJCQkJJGEgPSAoaW50KWZsb29yKCRpIC8gMyk7CgkJCQkkYiA9ICRpICUgMyArICR0aGlzLT5tb2R1bGVDb3VudCAtIDggLSAzOwoJCQkJJHYgPSAhJHRlc3QgJiYgKCgkYml0cyA+PiAkaSkgJiAxKSA9PT0gMTsKCgkJCQkkdGhpcy0+c2V0KCRiLCAkYSwgJHYsICR0aGlzOjpNX1ZFUlNJT04pOyAvLyBuZQoJCQkJJHRoaXMtPnNldCgkYSwgJGIsICR2LCAkdGhpczo6TV9WRVJTSU9OKTsgLy8gc3cKCQkJfQoKCQl9CgoJCXJldHVybiAkdGhpczsKCX0KCgkvKioKCSAqIERyYXdzIHRoZSBmb3JtYXQgaW5mbyBhbG9uZyB0aGUgZmluZGVyIHBhdHRlcm5zCgkgKgoJICogSVNPL0lFQyAxODAwNDoyMDAwIFNlY3Rpb24gOC45CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRGb3JtYXRJbmZvKGludCAkbWFza1BhdHRlcm4sIGJvb2wgJHRlc3QgPSBudWxsKTpRUk1hdHJpeHsKCQkkYml0cyA9ICR0aGlzOjpmb3JtYXRQYXR0ZXJuW1FSQ29kZTo6RUNDX01PREVTWyR0aGlzLT5lY2xldmVsXV1bJG1hc2tQYXR0ZXJuXSA/PyAwOwoKCQlmb3IoJGkgPSAwOyAkaSA8IDE1OyAkaSsrKXsKCQkJJHYgPSAhJHRlc3QgJiYgKCgkYml0cyA+PiAkaSkgJiAxKSA9PT0gMTsKCgkJCWlmKCRpIDwgNil7CgkJCQkkdGhpcy0+c2V0KDgsICRpLCAkdiwgJHRoaXM6Ok1fRk9STUFUKTsKCQkJfQoJCQllbHNlaWYoJGkgPCA4KXsKCQkJCSR0aGlzLT5zZXQoOCwgJGkgKyAxLCAkdiwgJHRoaXM6Ok1fRk9STUFUKTsKCQkJfQoJCQllbHNlewoJCQkJJHRoaXMtPnNldCg4LCAkdGhpcy0+bW9kdWxlQ291bnQgLSAxNSArICRpLCAkdiwgJHRoaXM6Ok1fRk9STUFUKTsKCQkJfQoKCQkJaWYoJGkgPCA4KXsKCQkJCSR0aGlzLT5zZXQoJHRoaXMtPm1vZHVsZUNvdW50IC0gJGkgLSAxLCA4LCAkdiwgJHRoaXM6Ok1fRk9STUFUKTsKCQkJfQoJCQllbHNlaWYoJGkgPCA5KXsKCQkJCSR0aGlzLT5zZXQoMTUgLSAkaSwgOCwgJHYsICR0aGlzOjpNX0ZPUk1BVCk7CgkJCX0KCQkJZWxzZXsKCQkJCSR0aGlzLT5zZXQoMTUgLSAkaSAtIDEsIDgsICR2LCAkdGhpczo6TV9GT1JNQVQpOwoJCQl9CgoJCX0KCgkJJHRoaXMtPnNldCg4LCAkdGhpcy0+bW9kdWxlQ291bnQgLSA4LCAhJHRlc3QsICR0aGlzOjpNX0ZPUk1BVCk7CgoJCXJldHVybiAkdGhpczsKCX0KCgkvKioKCSAqIERyYXdzIHRoZSAicXVpZXQgem9uZSIgb2YgJHNpemUgYXJvdW5kIHRoZSBtYXRyaXgKCSAqCgkgKiBJU08vSUVDIDE4MDA0OjIwMDAgU2VjdGlvbiA3LjMuNwoJICoKCSAqIEB0aHJvd3MgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJDb2RlRGF0YUV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0UXVpZXRab25lKGludCAkc2l6ZSA9IG51bGwpOlFSTWF0cml4ewoKCQlpZigkdGhpcy0+bWF0cml4WyR0aGlzLT5tb2R1bGVDb3VudCAtIDFdWyR0aGlzLT5tb2R1bGVDb3VudCAtIDFdID09PSAkdGhpczo6TV9OVUxMKXsKCQkJdGhyb3cgbmV3IFFSQ29kZURhdGFFeGNlcHRpb24oJ3VzZSBvbmx5IGFmdGVyIHdyaXRpbmcgZGF0YScpOwoJCX0KCgkJJHNpemUgPSAkc2l6ZSAhPT0gbnVsbAoJCQk/IG1heCgwLCBtaW4oJHNpemUsIGZsb29yKCR0aGlzLT5tb2R1bGVDb3VudCAvIDIpKSkKCQkJOiA0OwoKCQlmb3IoJHkgPSAwOyAkeSA8ICR0aGlzLT5tb2R1bGVDb3VudDsgJHkrKyl7CgkJCWZvcigkaSA9IDA7ICRpIDwgJHNpemU7ICRpKyspewoJCQkJYXJyYXlfdW5zaGlmdCgkdGhpcy0+bWF0cml4WyR5XSwgJHRoaXM6Ok1fUVVJRVRaT05FKTsKCQkJCWFycmF5X3B1c2goJHRoaXMtPm1hdHJpeFskeV0sICR0aGlzOjpNX1FVSUVUWk9ORSk7CgkJCX0KCQl9CgoJCSR0aGlzLT5tb2R1bGVDb3VudCArPSAoJHNpemUgKiAyKTsKCgkJJHIgPSBhcnJheV9maWxsKDAsICR0aGlzLT5tb2R1bGVDb3VudCwgJHRoaXM6Ok1fUVVJRVRaT05FKTsKCgkJZm9yKCRpID0gMDsgJGkgPCAkc2l6ZTsgJGkrKyl7CgkJCWFycmF5X3Vuc2hpZnQoJHRoaXMtPm1hdHJpeCwgJHIpOwoJCQlhcnJheV9wdXNoKCR0aGlzLT5tYXRyaXgsICRyKTsKCQl9CgoJCXJldHVybiAkdGhpczsKCX0KCgkvKioKCSAqIENsZWFycyBhIHNwYWNlIG9mICR3aWR0aCAqICRoZWlnaHQgaW4gb3JkZXIgdG8gYWRkIGEgbG9nbyBvciB0ZXh0LgoJICoKCSAqIEFkZGl0aW9uYWxseSwgdGhlIGxvZ28gc3BhY2UgY2FuIGJlIHBvc2l0aW9uZWQgd2l0aGluIHRoZSBRUiBDb2RlIC0gcmVzcGVjdGluZyB0aGUgbWFpbiBmdW5jdGlvbmFsIHBhdHRlcm5zIC0KCSAqIHVzaW5nICRzdGFydFggYW5kICRzdGFydFkuIElmIGVpdGhlciBvZiB0aGVzZSBhcmUgbnVsbCwgdGhlIGxvZ28gc3BhY2Ugd2lsbCBiZSBjZW50ZXJlZCBpbiB0aGF0IGRpcmVjdGlvbi4KCSAqIEVDQyBsZXZlbCAiSCIgKDMwJSkgaXMgcmVxdWlyZWQuCgkgKgoJICogUGxlYXNlIG5vdGUgdGhhdCBhZGRpbmcgYSBsb2dvIHNwYWNlIG1pbmltaXplcyB0aGUgZXJyb3IgY29ycmVjdGlvbiBjYXBhY2l0eSBvZiB0aGUgUVIgQ29kZSBhbmQKCSAqIGNyZWF0ZWQgaW1hZ2VzIG1heSBiZWNvbWUgdW5yZWFkYWJsZSwgZXNwZWNpYWxseSB3aGVuIHByaW50ZWQgd2l0aCBhIGNoYW5jZSB0byByZWNlaXZlIGRhbWFnZS4KCSAqIFBsZWFzZSB0ZXN0IHRob3JvdWdobHkgYmVmb3JlIHVzaW5nIHRoaXMgZmVhdHVyZSBpbiBwcm9kdWN0aW9uLgoJICoKCSAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYW4gb3V0cHV0IG1vZHVsZSAoYWZ0ZXIgdGhlIG1hdHJpeCBoYXMgYmVlbiBmaWxsZWQgd2l0aCBkYXRhKS4KCSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyByZXN0aWN0aW9uIG9uIGhvdyBtYW55IHRpbWVzIHRoaXMgbWV0aG9kIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGUgc2FtZSBtYXRyaXggaW5zdGFuY2UuCgkgKgoJICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2NoaWxsZXJsYW4vcGhwLXFyY29kZS9pc3N1ZXMvNTIKCSAqCgkgKiBAdGhyb3dzIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldExvZ29TcGFjZShpbnQgJHdpZHRoLCBpbnQgJGhlaWdodCwgaW50ICRzdGFydFggPSBudWxsLCBpbnQgJHN0YXJ0WSA9IG51bGwpOlFSTWF0cml4ewoKCQkvLyBmb3IgbG9nb3Mgd2Ugb3BlcmF0ZSBpbiBFQ0MgSCAoMzAlKSBvbmx5CgkJaWYoJHRoaXMtPmVjbGV2ZWwgIT09IFFSQ29kZTo6RUNDX0gpewoJCQl0aHJvdyBuZXcgUVJDb2RlRGF0YUV4Y2VwdGlvbignRUNDIGxldmVsICJIIiByZXF1aXJlZCB0byBhZGQgbG9nbyBzcGFjZScpOwoJCX0KCgkJLy8gd2UgbmVlZCB1bmV2ZW4gc2l6ZXMgdG8gY2VudGVyIHRoZSBsb2dvIHNwYWNlLCBhZGp1c3QgaWYgbmVlZGVkCgkJaWYoJHN0YXJ0WCA9PT0gbnVsbCAmJiAoJHdpZHRoICUgMikgPT09IDApewoJCQkkd2lkdGgrKzsKCQl9CgoJCWlmKCRzdGFydFkgPT09IG51bGwgJiYgKCRoZWlnaHQgJSAyKSA9PT0gMCl7CgkJCSRoZWlnaHQrKzsKCQl9CgoJCS8vICR0aGlzLT5tb2R1bGVDb3VudCBpbmNsdWRlcyB0aGUgcXVpZXQgem9uZSAoaWYgY3JlYXRlZCksIHdlIG5lZWQgdGhlIFFSIHNpemUgaGVyZQoJCSRsZW5ndGggPSAkdGhpcy0+dmVyc2lvbiAqIDQgKyAxNzsKCgkJLy8gdGhyb3cgaWYgdGhlIGxvZ28gc3BhY2UgZXhjZWVkcyB0aGUgbWF4aW11bSBlcnJvciBjb3JyZWN0aW9uIGNhcGFjaXR5CgkJaWYoJHdpZHRoICogJGhlaWdodCA+IGZsb29yKCRsZW5ndGggKiAkbGVuZ3RoICogMC4yKSl7CgkJCXRocm93IG5ldyBRUkNvZGVEYXRhRXhjZXB0aW9uKCdsb2dvIHNwYWNlIGV4Y2VlZHMgdGhlIG1heGltdW0gZXJyb3IgY29ycmVjdGlvbiBjYXBhY2l0eScpOwoJCX0KCgkJLy8gcXVpZXQgem9uZSBzaXplCgkJJHF6ICAgID0gKCR0aGlzLT5tb2R1bGVDb3VudCAtICRsZW5ndGgpIC8gMjsKCQkvLyBza2lwIHF1aWV0IHpvbmUgYW5kIHRoZSBmaXJzdCA5IHJvd3MvY29sdW1ucyAoZmluZGVyLSwgbW9kZS0sIHZlcnNpb24tIGFuZCB0aW1pbmcgcGF0dGVybnMpCgkJJHN0YXJ0ID0gJHF6ICsgOTsKCQkvLyBza2lwIHF1aWV0IHpvbmUKCQkkZW5kICAgPSAkdGhpcy0+bW9kdWxlQ291bnQgLSAkcXo7CgoJCS8vIGRldGVybWluZSBzdGFydCBjb29yZGluYXRlcwoJCSRzdGFydFggPSAoJHN0YXJ0WCAhPT0gbnVsbCA/ICRzdGFydFggOiAoJGxlbmd0aCAtICR3aWR0aCkgLyAyKSArICRxejsKCQkkc3RhcnRZID0gKCRzdGFydFkgIT09IG51bGwgPyAkc3RhcnRZIDogKCRsZW5ndGggLSAkaGVpZ2h0KSAvIDIpICsgJHF6OwoKCQkvLyBjbGVhciB0aGUgc3BhY2UKCQlmb3JlYWNoKCR0aGlzLT5tYXRyaXggYXMgJHkgPT4gJHJvdyl7CgkJCWZvcmVhY2goJHJvdyBhcyAkeCA9PiAkdmFsKXsKCQkJCS8vIG91dCBvZiBib3VuZHMsIHNraXAKCQkJCWlmKCR4IDwgJHN0YXJ0IHx8ICR5IDwgJHN0YXJ0IHx8JHggPj0gJGVuZCB8fCAkeSA+PSAkZW5kKXsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJCS8vIGEgbWF0Y2gKCQkJCWlmKCR4ID49ICRzdGFydFggJiYgJHggPCAoJHN0YXJ0WCArICR3aWR0aCkgJiYgJHkgPj0gJHN0YXJ0WSAmJiAkeSA8ICgkc3RhcnRZICsgJGhlaWdodCkpewoJCQkJCSR0aGlzLT5zZXQoJHgsICR5LCBmYWxzZSwgJHRoaXM6Ok1fTE9HTyk7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiAkdGhpczsKCX0KCgkvKioKCSAqIE1hcHMgdGhlIGJpbmFyeSAkZGF0YSBhcnJheSBmcm9tIFFSRGF0YUludGVyZmFjZTo6bWFza0VDQygpIG9uIHRoZSBtYXRyaXgsCgkgKiBtYXNraW5nIHRoZSBkYXRhIHVzaW5nICRtYXNrUGF0dGVybiAoSVNPL0lFQyAxODAwNDoyMDAwIFNlY3Rpb24gOC44KQoJICoKCSAqIEBzZWUgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6Om1hc2tFQ0MoKQoJICoKCSAqIEBwYXJhbSBpbnRbXSAkZGF0YQoJICogQHBhcmFtIGludCAgICRtYXNrUGF0dGVybgoJICoKCSAqIEByZXR1cm4gXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG1hcERhdGEoYXJyYXkgJGRhdGEsIGludCAkbWFza1BhdHRlcm4pOlFSTWF0cml4ewoJCSR0aGlzLT5tYXNrUGF0dGVybiA9ICRtYXNrUGF0dGVybjsKCQkkYnl0ZUNvdW50ICAgICAgICAgPSBjb3VudCgkZGF0YSk7CgkJJHkgICAgICAgICAgICAgICAgID0gJHRoaXMtPm1vZHVsZUNvdW50IC0gMTsKCQkkaW5jICAgICAgICAgICAgICAgPSAtMTsKCQkkYnl0ZUluZGV4ICAgICAgICAgPSAwOwoJCSRiaXRJbmRleCAgICAgICAgICA9IDc7CgkJJG1hc2sgICAgICAgICAgICAgID0gJHRoaXMtPmdldE1hc2soJHRoaXMtPm1hc2tQYXR0ZXJuKTsKCgkJZm9yKCRpID0gJHk7ICRpID4gMDsgJGkgLT0gMil7CgoJCQlpZigkaSA9PT0gNil7CgkJCQkkaS0tOwoJCQl9CgoJCQl3aGlsZSh0cnVlKXsKCQkJCWZvcigkYyA9IDA7ICRjIDwgMjsgJGMrKyl7CgkJCQkJJHggPSAkaSAtICRjOwoKCQkJCQlpZigkdGhpcy0+bWF0cml4WyR5XVskeF0gPT09ICR0aGlzOjpNX05VTEwpewoJCQkJCQkkdiA9IGZhbHNlOwoKCQkJCQkJaWYoJGJ5dGVJbmRleCA8ICRieXRlQ291bnQpewoJCQkJCQkJJHYgPSAoKCRkYXRhWyRieXRlSW5kZXhdID4+ICRiaXRJbmRleCkgJiAxKSA9PT0gMTsKCQkJCQkJfQoKCQkJCQkJaWYoJG1hc2soJHgsICR5KSA9PT0gMCl7CgkJCQkJCQkkdiA9ICEkdjsKCQkJCQkJfQoKCQkJCQkJJHRoaXMtPm1hdHJpeFskeV1bJHhdID0gJHRoaXM6Ok1fREFUQSA8PCAoJHYgPyA4IDogMCk7CgkJCQkJCSRiaXRJbmRleC0tOwoKCQkJCQkJaWYoJGJpdEluZGV4ID09PSAtMSl7CgkJCQkJCQkkYnl0ZUluZGV4Kys7CgkJCQkJCQkkYml0SW5kZXggPSA3OwoJCQkJCQl9CgoJCQkJCX0KCQkJCX0KCgkJCQkkeSArPSAkaW5jOwoKCQkJCWlmKCR5IDwgMCB8fCAkdGhpcy0+bW9kdWxlQ291bnQgPD0gJHkpewoJCQkJCSR5ICAgLT0gICRpbmM7CgkJCQkJJGluYyAgPSAtJGluYzsKCgkJCQkJYnJlYWs7CgkJCQl9CgoJCQl9CgkJfQoKCQlyZXR1cm4gJHRoaXM7Cgl9CgoJLyoqCgkgKiBJU08vSUVDIDE4MDA0OjIwMDAgU2VjdGlvbiA4LjguMQoJICoKCSAqIE5vdGUgdGhhdCBzb21lIHZlcnNpb25zIG9mIHRoZSBRUiBjb2RlIHN0YW5kYXJkIGhhdmUgaGFkIGVycm9ycyBpbiB0aGUgc2VjdGlvbiBhYm91dCBtYXNrIHBhdHRlcm5zLgoJICogVGhlIGluZm9ybWF0aW9uIGJlbG93IGhhcyBiZWVuIGNvcnJlY3RlZC4gKGh0dHBzOi8vd3d3LnRob25reS5jb20vcXItY29kZS10dXRvcmlhbC9tYXNrLXBhdHRlcm5zKQoJICoKCSAqIEBzZWUgXGNoaWxsZXJsYW5cUVJDb2RlXFFSTWF0cml4OjptYXBEYXRhKCkKCSAqCgkgKiBAaW50ZXJuYWwKCSAqCgkgKiBAdGhyb3dzIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24KCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE1hc2soaW50ICRtYXNrUGF0dGVybik6Q2xvc3VyZXsKCgkJaWYoKDBiMTExICYgJG1hc2tQYXR0ZXJuKSAhPT0gJG1hc2tQYXR0ZXJuKXsKCQkJdGhyb3cgbmV3IFFSQ29kZURhdGFFeGNlcHRpb24oJ2ludmFsaWQgbWFzayBwYXR0ZXJuJyk7IC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmUKCQl9CgoJCXJldHVybiBbCgkJCTBiMDAwID0+IGZuKCR4LCAkeSk6aW50ID0+ICgkeCArICR5KSAlIDIsCgkJCTBiMDAxID0+IGZuKCR4LCAkeSk6aW50ID0+ICR5ICUgMiwKCQkJMGIwMTAgPT4gZm4oJHgsICR5KTppbnQgPT4gJHggJSAzLAoJCQkwYjAxMSA9PiBmbigkeCwgJHkpOmludCA9PiAoJHggKyAkeSkgJSAzLAoJCQkwYjEwMCA9PiBmbigkeCwgJHkpOmludCA9PiAoKGludCkoJHkgLyAyKSArIChpbnQpKCR4IC8gMykpICUgMiwKCQkJMGIxMDEgPT4gZm4oJHgsICR5KTppbnQgPT4gKCgkeCAqICR5KSAlIDIpICsgKCgkeCAqICR5KSAlIDMpLAoJCQkwYjExMCA9PiBmbigkeCwgJHkpOmludCA9PiAoKCgkeCAqICR5KSAlIDIpICsgKCgkeCAqICR5KSAlIDMpKSAlIDIsCgkJCTBiMTExID0+IGZuKCR4LCAkeSk6aW50ID0+ICgoKCR4ICogJHkpICUgMykgKyAoKCR4ICsgJHkpICUgMikpICUgMiwKCQldWyRtYXNrUGF0dGVybl07Cgl9Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6MjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiRGF0YSI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeCI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJRUk1hdHJpeCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTE0OiJIb2xkcyBhIG51bWVyaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmluYWwgUVIgQ29kZTsKbWFwcyB0aGUgRUNDIGNvZGVkIGJpbmFyeSBkYXRhIGFuZCBhcHBsaWVzIHRoZSBtYXNrIHBhdHRlcm4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwiOjE6e3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsAHVyaSI7czo2NToiaHR0cDovL3d3dy50aG9ua3kuY29tL3FyLWNvZGUtdHV0b3JpYWwvZm9ybWF0LXZlcnNpb24taW5mb3JtYXRpb24iO31zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MjI6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGEiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjI6e3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO3M6NzoiQ2xvc3VyZSI7czo3OiJDbG9zdXJlIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjoxO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO047czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MTY6e3M6NDA6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX05VTEwiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDA6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX05VTEwiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJNX05VTEwiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czozOiIweDAiO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO319czo0NjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fREFSS01PRFVMRSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fREFSS01PRFVMRSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJNX0RBUktNT0RVTEUiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czozOiIweDIiO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO319czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fREFUQSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fREFUQSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjY6Ik1fREFUQSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjM6IjB4NCI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6TV9GSU5ERVIiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX0ZJTkRFUiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6Ik1fRklOREVSIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6MzoiMHg2IjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX1NFUEFSQVRPUiI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fU0VQQVJBVE9SIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6Ik1fU0VQQVJBVE9SIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6MzoiMHg4IjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mzc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX0FMSUdOTUVOVCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fQUxJR05NRU5UIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6Ik1fQUxJR05NRU5UIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mzg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6MzoiMHhhIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mzk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX1RJTUlORyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fVElNSU5HIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiTV9USU1JTkciO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czozOiIweGMiO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO319czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fRk9STUFUIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6TV9GT1JNQVQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJNX0ZPUk1BVCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjM6IjB4ZSI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6TV9WRVJTSU9OIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6TV9WRVJTSU9OIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiTV9WRVJTSU9OIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6NDoiMHgxMCI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6TV9RVUlFVFpPTkUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX1FVSUVUWk9ORSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJNX1FVSUVUWk9ORSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjQ6IjB4MTIiO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO319czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fTE9HTyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fTE9HTyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjY6Ik1fTE9HTyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjQ6IjB4MTQiO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO319czo0NjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fRklOREVSX0RPVCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Ok1fRklOREVSX0RPVCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJNX0ZJTkRFUl9ET1QiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czo0OiIweDE2IjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6NDA6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX1RFU1QiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDA6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpNX1RFU1QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJNX1RFU1QiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czo0OiIweGZmIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6NTA6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjphbGlnbm1lbnRQYXR0ZXJuIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6YWxpZ25tZW50UGF0dGVybiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE2OiJhbGlnbm1lbnRQYXR0ZXJuIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjEwMToiSVNPL0lFQyAxODAwNDoyMDAwIEFubmV4IEUsIFRhYmxlIEUuMSAtIFJvdy9jb2x1bW4gY29vcmRpbmF0ZXMgb2YgY2VudGVyIG1vZHVsZSBvZiBBbGlnbm1lbnQgUGF0dGVybnMiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTg6InZlcnNpb24gLT4gcGF0dGVybiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6MTAyMjoiWzEgPT4gW10sIDIgPT4gWzYsIDE4XSwgMyA9PiBbNiwgMjJdLCA0ID0+IFs2LCAyNl0sIDUgPT4gWzYsIDMwXSwgNiA9PiBbNiwgMzRdLCA3ID0+IFs2LCAyMiwgMzhdLCA4ID0+IFs2LCAyNCwgNDJdLCA5ID0+IFs2LCAyNiwgNDZdLCAxMCA9PiBbNiwgMjgsIDUwXSwgMTEgPT4gWzYsIDMwLCA1NF0sIDEyID0+IFs2LCAzMiwgNThdLCAxMyA9PiBbNiwgMzQsIDYyXSwgMTQgPT4gWzYsIDI2LCA0NiwgNjZdLCAxNSA9PiBbNiwgMjYsIDQ4LCA3MF0sIDE2ID0+IFs2LCAyNiwgNTAsIDc0XSwgMTcgPT4gWzYsIDMwLCA1NCwgNzhdLCAxOCA9PiBbNiwgMzAsIDU2LCA4Ml0sIDE5ID0+IFs2LCAzMCwgNTgsIDg2XSwgMjAgPT4gWzYsIDM0LCA2MiwgOTBdLCAyMSA9PiBbNiwgMjgsIDUwLCA3MiwgOTRdLCAyMiA9PiBbNiwgMjYsIDUwLCA3NCwgOThdLCAyMyA9PiBbNiwgMzAsIDU0LCA3OCwgMTAyXSwgMjQgPT4gWzYsIDI4LCA1NCwgODAsIDEwNl0sIDI1ID0+IFs2LCAzMiwgNTgsIDg0LCAxMTBdLCAyNiA9PiBbNiwgMzAsIDU4LCA4NiwgMTE0XSwgMjcgPT4gWzYsIDM0LCA2MiwgOTAsIDExOF0sIDI4ID0+IFs2LCAyNiwgNTAsIDc0LCA5OCwgMTIyXSwgMjkgPT4gWzYsIDMwLCA1NCwgNzgsIDEwMiwgMTI2XSwgMzAgPT4gWzYsIDI2LCA1MiwgNzgsIDEwNCwgMTMwXSwgMzEgPT4gWzYsIDMwLCA1NiwgODIsIDEwOCwgMTM0XSwgMzIgPT4gWzYsIDM0LCA2MCwgODYsIDExMiwgMTM4XSwgMzMgPT4gWzYsIDMwLCA1OCwgODYsIDExNCwgMTQyXSwgMzQgPT4gWzYsIDM0LCA2MiwgOTAsIDExOCwgMTQ2XSwgMzUgPT4gWzYsIDMwLCA1NCwgNzgsIDEwMiwgMTI2LCAxNTBdLCAzNiA9PiBbNiwgMjQsIDUwLCA3NiwgMTAyLCAxMjgsIDE1NF0sIDM3ID0+IFs2LCAyOCwgNTQsIDgwLCAxMDYsIDEzMiwgMTU4XSwgMzggPT4gWzYsIDMyLCA1OCwgODQsIDExMCwgMTM2LCAxNjJdLCAzOSA9PiBbNiwgMjYsIDU0LCA4MiwgMTEwLCAxMzgsIDE2Nl0sIDQwID0+IFs2LCAzMCwgNTgsIDg2LCAxMTQsIDE0MiwgMTcwXV0iO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO319czo0ODoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OnZlcnNpb25QYXR0ZXJuIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6dmVyc2lvblBhdHRlcm4iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNDoidmVyc2lvblBhdHRlcm4iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6ODc6IklTTy9JRUMgMTgwMDQ6MjAwMCBBbm5leCBELCBUYWJsZSBELjEgLSBWZXJzaW9uIGluZm9ybWF0aW9uIGJpdCBzdHJlYW0gZm9yIGVhY2ggdmVyc2lvbiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozNToibm8gdmVyc2lvbiBwYXR0ZXJuIGZvciBRUiBDb2RlcyA8IDciO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6OTE0OiJbNyA9PiAwYjExMTExMDAxMDAxMDEwMCwgOCA9PiAwYjEwMDAwMTAxMTAxMTExMDAsIDkgPT4gMGIxMDAxMTAxMDEwMDExMDAxLCAxMCA9PiAwYjEwMTAwMTAwMTEwMTAwMTEsIDExID0+IDBiMTAxMTEwMTExMTExMDExMCwgMTIgPT4gMGIxMTAwMDExMTAxMTAwMDEwLCAxMyA9PiAwYjExMDExMDAwMDEwMDAxMTEsIDE0ID0+IDBiMTExMDAxMTAwMDAwMTEwMSwgMTUgPT4gMGIxMTExMTAwMTAwMTAxMDAwLCAxNiA9PiAwYjEwMDAwMTAxMTAxMTExMDAwLCAxNyA9PiAwYjEwMDAxMDEwMDAxMDExMTAxLCAxOCA9PiAwYjEwMDEwMTAxMDAwMDEwMTExLCAxOSA9PiAwYjEwMDExMDEwMTAwMTEwMDEwLCAyMCA9PiAwYjEwMTAwMTAwMTEwMTAwMTEwLCAyMSA9PiAwYjEwMTAxMDExMDEwMDAwMDExLCAyMiA9PiAwYjEwMTEwMTAwMDExMDAxMDAxLCAyMyA9PiAwYjEwMTExMDExMTExMTAxMTAwLCAyNCA9PiAwYjExMDAwMTExMDExMDAwMTAwLCAyNSA9PiAwYjExMDAxMDAwMTExMTAwMDAxLCAyNiA9PiAwYjExMDEwMTExMTEwMTAxMDExLCAyNyA9PiAwYjExMDExMDAwMDEwMDAxMTEwLCAyOCA9PiAwYjExMTAwMTEwMDAwMDExMDEwLCAyOSA9PiAwYjExMTAxMDAxMTAwMTExMTExLCAzMCA9PiAwYjExMTEwMTEwMTAxMTEwMTAxLCAzMSA9PiAwYjExMTExMDAxMDAxMDEwMDAwLCAzMiA9PiAwYjEwMDAwMDEwMDExMTAxMDEwMSwgMzMgPT4gMGIxMDAwMDEwMTEwMTExMTAwMDAsIDM0ID0+IDBiMTAwMDEwMTAwMDEwMTExMDEwLCAzNSA9PiAwYjEwMDAxMTAxMTExMDAxMTExMSwgMzYgPT4gMGIxMDAxMDAxMDExMDAwMDEwMTEsIDM3ID0+IDBiMTAwMTAxMDEwMDAwMTAxMTEwLCAzOCA9PiAwYjEwMDExMDEwMTAwMTEwMDEwMCwgMzkgPT4gMGIxMDAxMTEwMTAxMDEwMDAwMDEsIDQwID0+IDBiMTAxMDAwMTEwMDAxMTAxMDAxXSI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO319czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OmZvcm1hdFBhdHRlcm4iO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4Ojpmb3JtYXRQYXR0ZXJuIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6ImZvcm1hdFBhdHRlcm4iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTE6IklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguOSAtIEZvcm1hdCBJbmZvcm1hdGlvbiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyNToiRUNDIGxldmVsIC0+IG1hc2sgcGF0dGVybiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTQ5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjc2MToiW1sKICAgIC8vIEwKICAgIDBiMTExMDExMTExMDAwMTAwLAogICAgMGIxMTEwMDEwMTExMTAwMTEsCiAgICAwYjExMTExMDExMDEwMTAxMCwKICAgIDBiMTExMTAwMDEwMDExMTAxLAogICAgMGIxMTAwMTEwMDAxMDExMTEsCiAgICAwYjExMDAwMTEwMDAxMTAwMCwKICAgIDBiMTEwMTEwMDAxMDAwMDAxLAogICAgMGIxMTAxMDAxMDExMTAxMTAsCl0sIFsKICAgIC8vIE0KICAgIDBiMTAxMDEwMDAwMDEwMDEwLAogICAgMGIxMDEwMDAxMDAxMDAxMDEsCiAgICAwYjEwMTExMTAwMTExMTEwMCwKICAgIDBiMTAxMTAxMTAxMDAxMDExLAogICAgMGIxMDAwMTAxMTExMTEwMDEsCiAgICAwYjEwMDAwMDAxMTAwMTExMCwKICAgIDBiMTAwMTExMTEwMDEwMTExLAogICAgMGIxMDAxMDEwMTAxMDAwMDAsCl0sIFsKICAgIC8vIFEKICAgIDBiMTEwMTAxMDEwMTExMTEsCiAgICAwYjExMDAwMDAxMTAxMDAwLAogICAgMGIxMTExMTEwMDExMDAwMSwKICAgIDBiMTExMDEwMDAwMDAxMTAsCiAgICAwYjEwMDEwMDEwMTEwMTAwLAogICAgMGIxMDAwMDExMDAwMDAxMSwKICAgIDBiMTAxMTEwMTEwMTEwMTAsCiAgICAwYjEwMTAxMTExMTAxMTAxLApdLCBbCiAgICAvLyBICiAgICAwYjEwMTEwMTAwMDEwMDEsCiAgICAwYjEwMDExMTAxMTExMTAsCiAgICAwYjExMTAwMTExMDAxMTEsCiAgICAwYjExMDAxMTEwMTAwMDAsCiAgICAwYjExMTAxMTAwMDEwLAogICAgMGIxMDAxMDEwMTAxLAogICAgMGIxMTAxMDAwMDExMDAsCiAgICAwYjEwMDAwMDExMTAxMSwKXV0iO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNTY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YTo1OntzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6JHZlcnNpb24iO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjokdmVyc2lvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6InZlcnNpb24iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzQ6InRoZSBjdXJyZW50IFFSIENvZGUgdmVyc2lvbiBudW1iZXIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxOTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIwMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6JGVjbGV2ZWwiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjokZWNsZXZlbCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6ImVjbGV2ZWwiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjE6InRoZSBjdXJyZW50IEVDQyBsZXZlbCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIwNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjA3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NDY6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjokbWFza1BhdHRlcm4iO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDY6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjokbWFza1BhdHRlcm4iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToibWFza1BhdHRlcm4iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTA6InRoZSB1c2VkIG1hc2sgcGF0dGVybiwgc2V0IHZpYSBRUk1hdHJpeDo6bWFwRGF0YSgpIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjA5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQ0OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpNQVNLX1BBVFRFUk5fQVVUTyI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIxMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6JG1vZHVsZUNvdW50IjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6JG1vZHVsZUNvdW50IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6Im1vZHVsZUNvdW50Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjM2OiJ0aGUgc2l6ZSAoc2lkZSBsZW5ndGgpIG9mIHRoZSBtYXRyaXgiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMTQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIxNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQxOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6JG1hdHJpeCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OiRtYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJtYXRyaXgiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjg6InRoZSBhY3R1YWwgbWF0cml4IGRhdGEgYXJyYXkiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIyNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjIxOntzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6X19jb25zdHJ1Y3QoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjE6IlFSTWF0cml4IGNvbnN0cnVjdG9yLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVGhyb3dzIjozOntzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJDb2RlRGF0YUV4Y2VwdGlvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE5OiJRUkNvZGVEYXRhRXhjZXB0aW9uIjt9fXM6NzoiACoAbmFtZSI7czo2OiJ0aHJvd3MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjI2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6X19jb25zdHJ1Y3QoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJfX2NvbnN0cnVjdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJ2ZXJzaW9uIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6ImVjbGV2ZWwiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjMxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9fXM6NDA6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4Ojppbml0KCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMzOiJzaG9ydGN1dCB0byBpbml0aWFsaXplIHRoZSBtYXRyaXgiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNDc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDA6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4Ojppbml0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJpbml0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjExOiJtYXNrUGF0dGVybiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJ0ZXN0IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQm9vbGVhbiI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO3M6NDoibnVsbCI7czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI1MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6IlFSTWF0cml4Ijt9fX1zOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6bWF0cml4KCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjg5OiJSZXR1cm5zIHRoZSBkYXRhIG1hdHJpeCwgcmV0dXJucyBhIHB1cmUgYm9vbGVhbiByZXByZXNlbnRhdGlvbiBpZiAkYm9vbGVhbiBpcyBzZXQgdG8gdHJ1ZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjptYXRyaXgoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjY6Im1hdHJpeCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJib29sZWFuIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQm9vbGVhbiI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO3M6NToiZmFsc2UiO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX1zOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6dmVyc2lvbigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozNDoiUmV0dXJucyB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlciI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI4NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OnZlcnNpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6InZlcnNpb24iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjg5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQ0OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6ZWNjTGV2ZWwoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjk6IlJldHVybnMgdGhlIGN1cnJlbnQgRUNDIGxldmVsIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjkzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ0OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6ZWNjTGV2ZWwoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6ImVjY0xldmVsIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI5NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Om1hc2tQYXR0ZXJuKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMyOiJSZXR1cm5zIHRoZSBjdXJyZW50IG1hc2sgcGF0dGVybiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMwMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6Om1hc2tQYXR0ZXJuKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToibWFza1BhdHRlcm4iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzAzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6c2l6ZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo4MjoiUmV0dXJucyB0aGUgYWJzb3VsdXRlIHNpemUgb2YgdGhlIG1hdHJpeCwgaW5jbHVkaW5nIHF1aWV0IHpvbmUgKGFmdGVyIHNldHRpbmcgaXQpLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo0Nzoic2l6ZSA9IHZlcnNpb24gKiA0ICsgMTcgWyArIDIgKiBxdWlldHpvbmUgc2l6ZV0iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMwNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OnNpemUoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6InNpemUiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzEyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjM5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6Z2V0KCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjUyOiJSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbW9kdWxlIGF0IHBvc2l0aW9uIFskeCwgJHldIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzE2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6Z2V0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czozOiJnZXQiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MToieCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czoxOiJ5IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMxOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OnNldCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1ODoiU2V0cyB0aGUgJE1fVFlQRSB2YWx1ZSBmb3IgdGhlIG1vZHVsZSBhdCBwb3NpdGlvbiBbJHgsICR5XSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozODoidHJ1ZSAgPT4gJE1fVFlQRSA8PCA4CmZhbHNlID0+ICRNX1RZUEUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMyMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OnNldCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6Mzoic2V0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjQ6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjE6IngiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MToieSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo1OiJ2YWx1ZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjM7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo2OiJNX1RZUEUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiUVJNYXRyaXgiO319fXM6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpjaGVjaygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1NToiQ2hlY2tzIHdoZXRoZXIgYSBtb2R1bGUgaXMgdHJ1ZSAoZGFyaykgb3IgZmFsc2UgKGxpZ2h0KSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMTM6InRydWUgID0+ICR2YWx1ZSA+PiA4ID09PSAkTV9UWVBFCiAgICAgICAgICR2YWx1ZSA+PiA4ID4gMAoKZmFsc2UgPT4gJHZhbHVlID09PSAkTV9UWVBFCiAgICAgICAgICR2YWx1ZSA+PiA4ID09PSAwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMzU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpjaGVjaygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NToiY2hlY2siO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MToieCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czoxOiJ5IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM0NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e319czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OnNldERhcmtNb2R1bGUoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6OTg6IlNldHMgdGhlICJkYXJrIG1vZHVsZSIsIHRoYXQgaXMgYWx3YXlzIG9uIHRoZSBzYW1lIHBvc2l0aW9uIDF4MXB4IGF3YXkgZnJvbSB0aGUgYm90dG9tIGxlZnQgZmluZGVyIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzQ5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6c2V0RGFya01vZHVsZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6InNldERhcmtNb2R1bGUiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzUyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiUVJNYXRyaXgiO319fXM6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpzZXRGaW5kZXJQYXR0ZXJuKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjc1OiJEcmF3cyB0aGUgN3g3IGZpbmRlciBwYXR0ZXJucyBpbiB0aGUgY29ybmVycyB0b3AgbGVmdC9yaWdodCBhbmQgYm90dG9tIGxlZnQiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzI6IklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDcuMy4yIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNTg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpzZXRGaW5kZXJQYXR0ZXJuKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoic2V0RmluZGVyUGF0dGVybiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNjM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJRUk1hdHJpeCI7fX19czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OnNldFNlcGFyYXRvcnMoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTI6IkRyYXdzIHRoZSBzZXBhcmF0b3IgbGluZXMgYXJvdW5kIHRoZSBmaW5kZXIgcGF0dGVybnMiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzI6IklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDcuMy4zIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozOTM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpzZXRTZXBhcmF0b3JzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMzoic2V0U2VwYXJhdG9ycyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozOTg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJRUk1hdHJpeCI7fX19czo1NToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OnNldEFsaWdubWVudFBhdHRlcm4oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzI6IkRyYXdzIHRoZSA1eDUgYWxpZ25tZW50IHBhdHRlcm5zIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjMyOiJJU08vSUVDIDE4MDA0OjIwMDAgU2VjdGlvbiA3LjMuNSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDIzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU1OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6c2V0QWxpZ25tZW50UGF0dGVybigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTk6InNldEFsaWdubWVudFBhdHRlcm4iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDI4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiUVJNYXRyaXgiO319fXM6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpzZXRUaW1pbmdQYXR0ZXJuKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjczOiJEcmF3cyB0aGUgdGltaW5nIHBhdHRlcm4gKGgvdiBjaGVja2VyZWQgbGluZSBiZXR3ZWVuIHRoZSBmaW5kZXIgcGF0dGVybnMpIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjMyOiJJU08vSUVDIDE4MDA0OjIwMDAgU2VjdGlvbiA3LjMuNCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDUzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6c2V0VGltaW5nUGF0dGVybigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTY6InNldFRpbWluZ1BhdHRlcm4iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDU4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiUVJNYXRyaXgiO319fXM6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpzZXRWZXJzaW9uTnVtYmVyKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQzOiJEcmF3cyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiwgMnggM3g2IHBpeGVsIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjMxOiJJU08vSUVDIDE4MDA0OjIwMDAgU2VjdGlvbiA4LjEwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NzU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpzZXRWZXJzaW9uTnVtYmVyKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoic2V0VmVyc2lvbk51bWJlciI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJ0ZXN0IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQm9vbGVhbiI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO3M6NDoibnVsbCI7czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ4MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6IlFSTWF0cml4Ijt9fX1zOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6c2V0Rm9ybWF0SW5mbygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0NzoiRHJhd3MgdGhlIGZvcm1hdCBpbmZvIGFsb25nIHRoZSBmaW5kZXIgcGF0dGVybnMiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzA6IklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguOSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDk5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6c2V0Rm9ybWF0SW5mbygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6InNldEZvcm1hdEluZm8iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MTE6Im1hc2tQYXR0ZXJuIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6InRlc3QiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xCb29sZWFuIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7czo0OiJudWxsIjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTA0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiUVJNYXRyaXgiO319fXM6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpzZXRRdWlldFpvbmUoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NDk6IkRyYXdzIHRoZSAicXVpZXQgem9uZSIgb2YgJHNpemUgYXJvdW5kIHRoZSBtYXRyaXgiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzI6IklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDcuMy43IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFRocm93cyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxOToiUVJDb2RlRGF0YUV4Y2VwdGlvbiI7fX1zOjc6IgAqAG5hbWUiO3M6NjoidGhyb3dzIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjUzNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0ODoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OnNldFF1aWV0Wm9uZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTI6InNldFF1aWV0Wm9uZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJzaXplIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO3M6NDoibnVsbCI7czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU0NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6IlFSTWF0cml4Ijt9fX1zOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6c2V0TG9nb1NwYWNlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjY2OiJDbGVhcnMgYSBzcGFjZSBvZiAkd2lkdGggKiAkaGVpZ2h0IGluIG9yZGVyIHRvIGFkZCBhIGxvZ28gb3IgdGV4dC4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NzE5OiJBZGRpdGlvbmFsbHksIHRoZSBsb2dvIHNwYWNlIGNhbiBiZSBwb3NpdGlvbmVkIHdpdGhpbiB0aGUgUVIgQ29kZSAtIHJlc3BlY3RpbmcgdGhlIG1haW4gZnVuY3Rpb25hbCBwYXR0ZXJucyAtCnVzaW5nICRzdGFydFggYW5kICRzdGFydFkuIElmIGVpdGhlciBvZiB0aGVzZSBhcmUgbnVsbCwgdGhlIGxvZ28gc3BhY2Ugd2lsbCBiZSBjZW50ZXJlZCBpbiB0aGF0IGRpcmVjdGlvbi4KRUNDIGxldmVsICJIIiAoMzAlJSkgaXMgcmVxdWlyZWQuCgpQbGVhc2Ugbm90ZSB0aGF0IGFkZGluZyBhIGxvZ28gc3BhY2UgbWluaW1pemVzIHRoZSBlcnJvciBjb3JyZWN0aW9uIGNhcGFjaXR5IG9mIHRoZSBRUiBDb2RlIGFuZApjcmVhdGVkIGltYWdlcyBtYXkgYmVjb21lIHVucmVhZGFibGUsIGVzcGVjaWFsbHkgd2hlbiBwcmludGVkIHdpdGggYSBjaGFuY2UgdG8gcmVjZWl2ZSBkYW1hZ2UuClBsZWFzZSB0ZXN0IHRob3JvdWdobHkgYmVmb3JlIHVzaW5nIHRoaXMgZmVhdHVyZSBpbiBwcm9kdWN0aW9uLgoKVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBvdXRwdXQgbW9kdWxlIChhZnRlciB0aGUgbWF0cml4IGhhcyBiZWVuIGZpbGxlZCB3aXRoIGRhdGEpLgpOb3RlIHRoYXQgdGhlcmUgaXMgbm8gcmVzdGljdGlvbiBvbiBob3cgbWFueSB0aW1lcyB0aGlzIG1ldGhvZCBjb3VsZCBiZSBjYWxsZWQgb24gdGhlIHNhbWUgbWF0cml4IGluc3RhbmNlLiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjI6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xMaW5rIjozOntzOjc6IgAqAG5hbWUiO3M6NDoibGluayI7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXExpbmsAbGluayI7czo1MDoiaHR0cHM6Ly9naXRodWIuY29tL2NoaWxsZXJsYW4vcGhwLXFyY29kZS9pc3N1ZXMvNTIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVGhyb3dzIjozOntzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJDb2RlRGF0YUV4Y2VwdGlvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE5OiJRUkNvZGVEYXRhRXhjZXB0aW9uIjt9fXM6NzoiACoAbmFtZSI7czo2OiJ0aHJvd3MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTczO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6c2V0TG9nb1NwYWNlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMjoic2V0TG9nb1NwYWNlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjQ6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjU6IndpZHRoIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjY6ImhlaWdodCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo2OiJzdGFydFgiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7czo0OiJudWxsIjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aTozO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6Njoic3RhcnRZIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO3M6NDoibnVsbCI7czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU5MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6IlFSTWF0cml4Ijt9fX1zOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6bWFwRGF0YSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxNDM6Ik1hcHMgdGhlIGJpbmFyeSAkZGF0YSBhcnJheSBmcm9tIFFSRGF0YUludGVyZmFjZTo6bWFza0VDQygpIG9uIHRoZSBtYXRyaXgsCm1hc2tpbmcgdGhlIGRhdGEgdXNpbmcgJG1hc2tQYXR0ZXJuIChJU08vSUVDIDE4MDA0OjIwMDAgU2VjdGlvbiA4LjgpIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjQ6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjU0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4iOjE6e3M6NjE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhQWJzdHJhY3Q6Om1hc2tFQ0MoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6Im1hc2tFQ0MiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbSI6Njp7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAHZhcmlhYmxlTmFtZSI7czo0OiJkYXRhIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtIjo2OntzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AdmFyaWFibGVOYW1lIjtzOjExOiJtYXNrUGF0dGVybiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzVmFyaWFkaWMiO2I6MDtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNSZWZlcmVuY2UiO2I6MDtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiUVJNYXRyaXgiO319czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2NDM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjptYXBEYXRhKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJtYXBEYXRhIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImRhdGEiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjExOiJtYXNrUGF0dGVybiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2NTQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJRUk1hdHJpeCI7fX19czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OmdldE1hc2soKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzI6IklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguOC4xIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE5NzoiTm90ZSB0aGF0IHNvbWUgdmVyc2lvbnMgb2YgdGhlIFFSIGNvZGUgc3RhbmRhcmQgaGF2ZSBoYWQgZXJyb3JzIGluIHRoZSBzZWN0aW9uIGFib3V0IG1hc2sgcGF0dGVybnMuClRoZSBpbmZvcm1hdGlvbiBiZWxvdyBoYXMgYmVlbiBjb3JyZWN0ZWQuIChodHRwczovL3d3dy50aG9ua3kuY29tL3FyLWNvZGUtdHV0b3JpYWwvbWFzay1wYXR0ZXJucykiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTozOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzg6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk1hdHJpeDo6bWFwRGF0YSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NzoibWFwRGF0YSI7fX1zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xUaHJvd3MiOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkNvZGVEYXRhRXhjZXB0aW9uIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTk6IlFSQ29kZURhdGFFeGNlcHRpb24iO319czo3OiIAKgBuYW1lIjtzOjY6InRocm93cyI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3MTA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjpnZXRNYXNrKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJnZXRNYXNrIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjExOiJtYXNrUGF0dGVybiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3MjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo4OiJcQ2xvc3VyZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6IkNsb3N1cmUiO319fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/H/K/tT26dyzwqfVNAGTm+IxQ b/files/H/K/tT26dyzwqfVNAGTm+IxQ
deleted file mode 100644
index abc1ddbb4..000000000
--- a/files/H/K/tT26dyzwqfVNAGTm+IxQ
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A908f984026aba14f9c4eb5f8b5309120-c8543d38b09d96630c9e82b87517072f
-s:21672:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTQ6IkNsYXNzIFFSU3RyaW5nIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjg6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEyOiJRUlN0cmluZy5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIwNS4xMi4yMDE1IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyNDoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjY6IlNtaWxleSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoyMToic21pbGV5QGNoaWxsZXJsYW4ubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiIyMDE1IFNtaWxleSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzoiTUlUIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo2O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMjoibm9pbnNwZWN0aW9uIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyODoiUGhwVW51c2VkUGFyYW1ldGVySW5zcGVjdGlvbiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NztPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6Im5vaW5zcGVjdGlvbiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzU6IlBocENvbXBvc2VyRXh0ZW5zaW9uU3R1YnNJbnNwZWN0aW9uIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiJjODU0M2QzOGIwOWQ5NjYzMGM5ZTgyYjg3NTE3MDcyZiI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjEyOiJRUlN0cmluZy5waHAiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czoyMzoic3JjL091dHB1dC9RUlN0cmluZy5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjE0NTY6Ijw/cGhwCi8qKgogKiBDbGFzcyBRUlN0cmluZwogKgogKiBAZmlsZXNvdXJjZSAgIFFSU3RyaW5nLnBocAogKiBAY3JlYXRlZCAgICAgIDA1LjEyLjIwMTUKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKgogKiBAbm9pbnNwZWN0aW9uIFBocFVudXNlZFBhcmFtZXRlckluc3BlY3Rpb24KICogQG5vaW5zcGVjdGlvbiBQaHBDb21wb3NlckV4dGVuc2lvblN0dWJzSW5zcGVjdGlvbgogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQ7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOwoKdXNlIGZ1bmN0aW9uIGltcGxvZGUsIGlzX3N0cmluZywganNvbl9lbmNvZGU7CgovKioKICogQ29udmVydHMgdGhlIG1hdHJpeCBkYXRhIGludG8gc3RyaW5nIHR5cGVzCiAqLwpjbGFzcyBRUlN0cmluZyBleHRlbmRzIFFST3V0cHV0QWJzdHJhY3R7CgoJcHJvdGVjdGVkIHN0cmluZyAkZGVmYXVsdE1vZGUgPSBRUkNvZGU6Ok9VVFBVVF9TVFJJTkdfVEVYVDsKCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRNb2R1bGVWYWx1ZXMoKTp2b2lkewoKCQlmb3JlYWNoKCR0aGlzOjpERUZBVUxUX01PRFVMRV9WQUxVRVMgYXMgJE1fVFlQRSA9PiAkZGVmYXVsdFZhbHVlKXsKCQkJJHYgPSAkdGhpcy0+b3B0aW9ucy0+bW9kdWxlVmFsdWVzWyRNX1RZUEVdID8/IG51bGw7CgoJCQlpZighaXNfc3RyaW5nKCR2KSl7CgkJCQkkdGhpcy0+bW9kdWxlVmFsdWVzWyRNX1RZUEVdID0gJGRlZmF1bHRWYWx1ZQoJCQkJCT8gJHRoaXMtPm9wdGlvbnMtPnRleHREYXJrCgkJCQkJOiAkdGhpcy0+b3B0aW9ucy0+dGV4dExpZ2h0OwoJCQl9CgkJCWVsc2V7CgkJCQkkdGhpcy0+bW9kdWxlVmFsdWVzWyRNX1RZUEVdID0gJHY7CgkJCX0KCgkJfQoKCX0KCgkvKioKCSAqIHN0cmluZyBvdXRwdXQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHRleHQoc3RyaW5nICRmaWxlID0gbnVsbCk6c3RyaW5newoJCSRzdHIgPSBbXTsKCgkJZm9yZWFjaCgkdGhpcy0+bWF0cml4LT5tYXRyaXgoKSBhcyAkcm93KXsKCQkJJHIgPSBbXTsKCgkJCWZvcmVhY2goJHJvdyBhcyAkTV9UWVBFKXsKCQkJCSRyW10gPSAkdGhpcy0+bW9kdWxlVmFsdWVzWyRNX1RZUEVdOwoJCQl9CgoJCQkkc3RyW10gPSBpbXBsb2RlKCcnLCAkcik7CgkJfQoKCQlyZXR1cm4gaW1wbG9kZSgkdGhpcy0+b3B0aW9ucy0+ZW9sLCAkc3RyKTsKCX0KCgkvKioKCSAqIEpTT04gb3V0cHV0CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBqc29uKHN0cmluZyAkZmlsZSA9IG51bGwpOnN0cmluZ3sKCQlyZXR1cm4ganNvbl9lbmNvZGUoJHRoaXMtPm1hdHJpeC0+bWF0cml4KCkpOwoJfQoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjI1OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjU6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJPdXRwdXQiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czozNDoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUlN0cmluZyI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNDoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUlN0cmluZyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6IlFSU3RyaW5nIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0MjoiQ29udmVydHMgdGhlIG1hdHJpeCBkYXRhIGludG8gc3RyaW5nIHR5cGVzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjE6e3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0QWJzdHJhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoiUVJPdXRwdXRBYnN0cmFjdCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YToxOntzOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSU3RyaW5nOjokZGVmYXVsdE1vZGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJTdHJpbmc6OiRkZWZhdWx0TW9kZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJkZWZhdWx0TW9kZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtOO3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfU1RSSU5HX1RFWFQiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6Mzp7czo1MzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUlN0cmluZzo6c2V0TW9kdWxlVmFsdWVzKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUlN0cmluZzo6c2V0TW9kdWxlVmFsdWVzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToic2V0TW9kdWxlVmFsdWVzIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUlN0cmluZzo6dGV4dCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxMzoic3RyaW5nIG91dHB1dCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjUwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSU3RyaW5nOjp0ZXh0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJ0ZXh0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImZpbGUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7czo0OiJudWxsIjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9fXM6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJTdHJpbmc6Ompzb24oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTE6IkpTT04gb3V0cHV0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Njk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJTdHJpbmc6Ompzb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6Impzb24iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoiZmlsZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtzOjQ6Im51bGwiO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e319fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9fQ==";
\ No newline at end of file
diff --git a/files/H/W/k1nqXa0ZlKwMahkSnoHQ b/files/H/W/k1nqXa0ZlKwMahkSnoHQ
deleted file mode 100644
index ff3d96ad9..000000000
--- a/files/H/W/k1nqXa0ZlKwMahkSnoHQ
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A401116d23a0230fa80932e4cc8aefad0-8e7f53ba5985b7cc716a12ea77364745
-s:8700:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjE6IkNsYXNzIFFSQ29kZUV4Y2VwdGlvbiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxOToiUVJDb2RlRXhjZXB0aW9uLnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjI3LjExLjIwMTUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE3OiJjaGlsbGVybGFuXFFSQ29kZSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNSBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiOGU3ZjUzYmE1OTg1YjdjYzcxNmExMmVhNzczNjQ3NDUiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxOToiUVJDb2RlRXhjZXB0aW9uLnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjIzOiJzcmMvUVJDb2RlRXhjZXB0aW9uLnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6MzYzOiI8P3BocAovKioKICogQ2xhc3MgUVJDb2RlRXhjZXB0aW9uCiAqCiAqIEBmaWxlc291cmNlICAgUVJDb2RlRXhjZXB0aW9uLnBocAogKiBAY3JlYXRlZCAgICAgIDI3LjExLjIwMTUKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZQogKiBAYXV0aG9yICAgICAgIFNtaWxleSA8c21pbGV5QGNoaWxsZXJsYW4ubmV0PgogKiBAY29weXJpZ2h0ICAgIDIwMTUgU21pbGV5CiAqIEBsaWNlbnNlICAgICAgTUlUCiAqLwoKbmFtZXNwYWNlIGNoaWxsZXJsYW5cUVJDb2RlOwoKdXNlIEV4Y2VwdGlvbjsKCi8qKgogKiBBbiBleGNlcHRpb24gY29udGFpbmVyCiAqLwpjbGFzcyBRUkNvZGVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb257fQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjE4OiJcY2hpbGxlcmxhblxRUkNvZGUiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoxODoiXGNoaWxsZXJsYW5cUVJDb2RlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiUVJDb2RlIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6MzQ6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGVFeGNlcHRpb24iO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzQ6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGVFeGNlcHRpb24iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToiUVJDb2RlRXhjZXB0aW9uIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoyMjoiQW4gZXhjZXB0aW9uIGNvbnRhaW5lciI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoxNzoiY2hpbGxlcmxhblxRUkNvZGUiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjE6e3M6OToiRXhjZXB0aW9uIjtzOjk6IkV4Y2VwdGlvbiI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcGFyZW50IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MTA6IlxFeGNlcHRpb24iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJFeGNlcHRpb24iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/I/1/-zbRpsfYv2tz+dVPL5Cw b/files/I/1/-zbRpsfYv2tz+dVPL5Cw
deleted file mode 100644
index 4819d6804..000000000
--- a/files/I/1/-zbRpsfYv2tz+dVPL5Cw
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Ac0227aab7b13ad115cf8cc086003c2c6-53f7a710b6ccf97d667632081e9cc719
-s:24096:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTg6IkNsYXNzIEFscGhhTnVtVGVzdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxNjoiQWxwaGFOdW1UZXN0LnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjI0LjExLjIwMTciO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI2OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNyBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiNTNmN2E3MTBiNmNjZjk3ZDY2NzYzMjA4MWU5Y2M3MTkiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxNjoiQWxwaGFOdW1UZXN0LnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjI3OiJ0ZXN0cy9EYXRhL0FscGhhTnVtVGVzdC5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjE1NDE6Ijw/cGhwCi8qKgogKiBDbGFzcyBBbHBoYU51bVRlc3QKICoKICogQGZpbGVzb3VyY2UgICBBbHBoYU51bVRlc3QucGhwCiAqIEBjcmVhdGVkICAgICAgMjQuMTEuMjAxNwogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhCiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGE7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcRGF0YVx7QWxwaGFOdW0sIFFSQ29kZURhdGFFeGNlcHRpb24sIFFSRGF0YUludGVyZmFjZX07CnVzZSBjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnM7CgovKioKICogVGVzdHMgdGhlIEFscGhhTnVtIGNsYXNzCiAqLwpmaW5hbCBjbGFzcyBBbHBoYU51bVRlc3QgZXh0ZW5kcyBEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0ewoKCS8qKiBAaW50ZXJuYWwgKi8KCXByb3RlY3RlZCBzdHJpbmcgJHRlc3RkYXRhICA9ICcwICQlKistLi86JzsKCgkvKiogQGludGVybmFsICovCglwcm90ZWN0ZWQgYXJyYXkgICRleHBlY3RlZCAgPSBbCgkJMzIsIDgwLCAzNiwgMjEyLCAyNTIsIDE1LCAxNzUsIDI1MSwKCQkxNzYsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwKCQkxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwKCQkxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwKCQkxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTEyLCA0MywgOSwgMjQ4LCAyMDAsIDE5NCwgNzUsIDI1LAoJCTIwNSwgMTczLCAxNTQsIDY4LCAxOTEsIDE2LCAxMjgsCgkJOTIsIDExMiwgMjAsIDE5OCwgMjcKCV07CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICogQGludGVybmFsCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXREYXRhSW50ZXJmYWNlSW5zdGFuY2UoUVJPcHRpb25zICRvcHRpb25zKTpRUkRhdGFJbnRlcmZhY2V7CgkJcmV0dXJuIG5ldyBBbHBoYU51bSgkb3B0aW9ucyk7Cgl9CgoJLyoqCgkgKiBUZXN0cyBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gYW4gaW52YWxpZCBjaGFyYWN0ZXIgaXMgZW5jb3VudGVyZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRDaGFyQ29kZUV4Y2VwdGlvbigpOnZvaWR7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbihRUkNvZGVEYXRhRXhjZXB0aW9uOjpjbGFzcyk7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbk1lc3NhZ2UoJ2lsbGVnYWwgY2hhcjogIiMiIFszNV0nKTsKCgkJJHRoaXMtPmRhdGFJbnRlcmZhY2UtPnNldERhdGEoJyMnKTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyNzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6IkRhdGEiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXEFscGhhTnVtVGVzdCI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXEFscGhhTnVtVGVzdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJBbHBoYU51bVRlc3QiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjI0OiJUZXN0cyB0aGUgQWxwaGFOdW0gY2xhc3MiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MjY6ImNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTo0OntzOjg6IkFscGhhTnVtIjtzOjMxOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEFscGhhTnVtIjtzOjE5OiJRUkNvZGVEYXRhRXhjZXB0aW9uIjtzOjQyOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24iO3M6MTU6IlFSRGF0YUludGVyZmFjZSI7czozODoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2UiO3M6OToiUVJPcHRpb25zIjtzOjI3OiJjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjE7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUzOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcRGF0YWludGVyZmFjZVRlc3RBYnN0cmFjdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI1OiJEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjI6e3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxBbHBoYU51bVRlc3Q6OiR0ZXN0ZGF0YSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXEFscGhhTnVtVGVzdDo6JHRlc3RkYXRhIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoidGVzdGRhdGEiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjEyOiInMCAkJSorLS4vOiciO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX1zOjUxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcQWxwaGFOdW1UZXN0OjokZXhwZWN0ZWQiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxBbHBoYU51bVRlc3Q6OiRleHBlY3RlZCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6ImV4cGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0NTE6IlszMiwgODAsIDM2LCAyMTIsIDI1MiwgMTUsIDE3NSwgMjUxLCAxNzYsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTEyLCA0MywgOSwgMjQ4LCAyMDAsIDE5NCwgNzUsIDI1LCAyMDUsIDE3MywgMTU0LCA2OCwgMTkxLCAxNiwgMTI4LCA5MiwgMTEyLCAyMCwgMTk4LCAyN10iO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjI6e3M6Njg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxBbHBoYU51bVRlc3Q6OmdldERhdGFJbnRlcmZhY2VJbnN0YW5jZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcQWxwaGFOdW1UZXN0OjpnZXREYXRhSW50ZXJmYWNlSW5zdGFuY2UoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI0OiJnZXREYXRhSW50ZXJmYWNlSW5zdGFuY2UiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6Nzoib3B0aW9ucyI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiUVJPcHRpb25zIjt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJRUkRhdGFJbnRlcmZhY2UiO319fXM6Njg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxBbHBoYU51bVRlc3Q6OnRlc3RHZXRDaGFyQ29kZUV4Y2VwdGlvbigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo3MjoiVGVzdHMgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIGFuIGludmFsaWQgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Njg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxBbHBoYU51bVRlc3Q6OnRlc3RHZXRDaGFyQ29kZUV4Y2VwdGlvbigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjQ6InRlc3RHZXRDaGFyQ29kZUV4Y2VwdGlvbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/I/A/9ZKcbwcmgD+kEhARMgzQ b/files/I/A/9ZKcbwcmgD+kEhARMgzQ
deleted file mode 100644
index 9b454d2bd..000000000
--- a/files/I/A/9ZKcbwcmgD+kEhARMgzQ
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Ab776832d0b3df88872bae4fe1e49dd65-e503bbf23a8c7af435da47f2b8023b42
-s:29892:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTY6IkNsYXNzIFFSRnBkZlRlc3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTQ6IlFSRnBkZlRlc3QucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMDMuMDYuMjAyMCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6Mjg6ImNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6Njoic21pbGV5IjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjIxOiJzbWlsZXlAY2hpbGxlcmxhbi5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IjIwMjAgc21pbGV5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo1O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozOiJNSVQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czowOiIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjA6e319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6ImU1MDNiYmYyM2E4YzdhZjQzNWRhNDdmMmI4MDIzYjQyIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWUiO3M6MTQ6IlFSRnBkZlRlc3QucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6Mjc6InRlc3RzL091dHB1dC9RUkZwZGZUZXN0LnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6MjA3MzoiPD9waHAKLyoqCiAqIENsYXNzIFFSRnBkZlRlc3QKICoKICogQGZpbGVzb3VyY2UgICBRUkZwZGZUZXN0LnBocAogKiBAY3JlYXRlZCAgICAgIDAzLjA2LjIwMjAKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0CiAqIEBhdXRob3IgICAgICAgc21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAyMCBzbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dDsKCnVzZSBGUERGOwp1c2UgY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XHtRUkZwZGYsIFFST3V0cHV0SW50ZXJmYWNlfTsKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXHtRUkNvZGUsIFFST3B0aW9uc307Cgp1c2UgZnVuY3Rpb24gY2xhc3NfZXhpc3RzLCBzdWJzdHI7CgovKioKICogVGVzdHMgdGhlIFFSRnBkZiBvdXRwdXQgbW9kdWxlCiAqLwpjbGFzcyBRUkZwZGZUZXN0IGV4dGVuZHMgUVJPdXRwdXRUZXN0QWJzdHJhY3R7CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICogQGludGVybmFsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRVcCgpOnZvaWR7CgoJCWlmKCFjbGFzc19leGlzdHMoRlBERjo6Y2xhc3MpKXsKCQkJJHRoaXMtPm1hcmtUZXN0U2tpcHBlZCgnRlBERiBub3QgYXZhaWxhYmxlJyk7CgoJCQkvKiogQG5vaW5zcGVjdGlvbiBQaHBVbnJlYWNoYWJsZVN0YXRlbWVudEluc3BlY3Rpb24gKi8KCQkJcmV0dXJuOwoJCX0KCgkJcGFyZW50OjpzZXRVcCgpOwoJfQoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqIEBpbnRlcm5hbAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0T3V0cHV0SW50ZXJmYWNlKFFST3B0aW9ucyAkb3B0aW9ucyk6UVJPdXRwdXRJbnRlcmZhY2V7CgkJcmV0dXJuIG5ldyBRUkZwZGYoJG9wdGlvbnMsICR0aGlzLT5tYXRyaXgpOwoJfQoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqIEBpbnRlcm5hbAoJICovCglwdWJsaWMgZnVuY3Rpb24gdHlwZXMoKTphcnJheXsKCQlyZXR1cm4gWwoJCQknZnBkZicgPT4gW1FSQ29kZTo6T1VUUFVUX0ZQREZdLAoJCV07Cgl9CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdFNldE1vZHVsZVZhbHVlcygpOnZvaWR7CgoJCSR0aGlzLT5vcHRpb25zLT5tb2R1bGVWYWx1ZXMgPSBbCgkJCS8vIGRhdGEKCQkJMTAyNCA9PiBbMCwgMCwgMF0sCgkJCTQgICAgPT4gWzI1NSwgMjU1LCAyNTVdLAoJCV07CgoJCSR0aGlzLT5vdXRwdXRJbnRlcmZhY2UgPSAkdGhpcy0+Z2V0T3V0cHV0SW50ZXJmYWNlKCR0aGlzLT5vcHRpb25zKTsKCQkkdGhpcy0+b3V0cHV0SW50ZXJmYWNlLT5kdW1wKCk7CgoJCSR0aGlzOjphc3NlcnRUcnVlKHRydWUpOyAvLyB0cmlja2luZyB0aGUgY29kZSBjb3ZlcmFnZQoJfQoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqIEBkYXRhUHJvdmlkZXIgdHlwZXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RSZW5kZXJJbWFnZShzdHJpbmcgJHR5cGUpOnZvaWR7CgkJJHRoaXMtPm9wdGlvbnMtPm91dHB1dFR5cGUgID0gJHR5cGU7CgkJJHRoaXMtPm9wdGlvbnMtPmltYWdlQmFzZTY0ID0gZmFsc2U7CgoJCS8vIHN1YnN0cigpIHRvIGF2b2lkIENyZWF0aW9uRGF0ZQoJCSRleHBlY3RlZCA9IHN1YnN0cihmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fLicvc2FtcGxlcy8nLiR0eXBlKSwgMCwgMjUwMCk7CgkJJGFjdHVhbCAgID0gc3Vic3RyKChuZXcgUVJDb2RlKCR0aGlzLT5vcHRpb25zKSktPnJlbmRlcigndGVzdCcpLCAwLCAyNTAwKTsKCgkJJHRoaXM6OmFzc2VydFNhbWUoJGV4cGVjdGVkLCAkYWN0dWFsKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gdGVzdE91dHB1dEdldFJlc291cmNlKCk6dm9pZHsKCQkkdGhpcy0+b3B0aW9ucy0+cmV0dXJuUmVzb3VyY2UgPSB0cnVlOwoJCSR0aGlzLT5vdXRwdXRJbnRlcmZhY2UgICAgICAgICA9ICR0aGlzLT5nZXRPdXRwdXRJbnRlcmZhY2UoJHRoaXMtPm9wdGlvbnMpOwoKCQkkdGhpczo6YXNzZXJ0SW5zdGFuY2VPZihGUERGOjpjbGFzcywgJHRoaXMtPm91dHB1dEludGVyZmFjZS0+ZHVtcCgpKTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyOToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyOToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJPdXRwdXQiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJGcGRmVGVzdCI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJGcGRmVGVzdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJRUkZwZGZUZXN0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozMDoiVGVzdHMgdGhlIFFSRnBkZiBvdXRwdXQgbW9kdWxlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjI4OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTo1OntzOjQ6IkZQREYiO3M6NDoiRlBERiI7czo2OiJRUkZwZGYiO3M6MzE6ImNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkZwZGYiO3M6MTc6IlFST3V0cHV0SW50ZXJmYWNlIjtzOjQyOiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2UiO3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO3M6OToiUVJPcHRpb25zIjtzOjI3OiJjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIwOiJRUk91dHB1dFRlc3RBYnN0cmFjdCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6Njp7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJGcGRmVGVzdDo6c2V0VXAoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjI6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXREb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJGcGRmVGVzdDo6c2V0VXAoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6InNldFVwIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo2MjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJGcGRmVGVzdDo6Z2V0T3V0cHV0SW50ZXJmYWNlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSRnBkZlRlc3Q6OmdldE91dHB1dEludGVyZmFjZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTg6ImdldE91dHB1dEludGVyZmFjZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJvcHRpb25zIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjg6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJRUk9wdGlvbnMiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJRUk91dHB1dEludGVyZmFjZSI7fX19czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJGcGRmVGVzdDo6dHlwZXMoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjI6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXREb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJGcGRmVGVzdDo6dHlwZXMoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6InR5cGVzIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19czo2MzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJGcGRmVGVzdDo6dGVzdFNldE1vZHVsZVZhbHVlcygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjM6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSRnBkZlRlc3Q6OnRlc3RTZXRNb2R1bGVWYWx1ZXMoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE5OiJ0ZXN0U2V0TW9kdWxlVmFsdWVzIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjYzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo1OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJGcGRmVGVzdDo6dGVzdFJlbmRlckltYWdlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMjoiZGF0YVByb3ZpZGVyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo1OiJ0eXBlcyI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Nzc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSRnBkZlRlc3Q6OnRlc3RSZW5kZXJJbWFnZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6InRlc3RSZW5kZXJJbWFnZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJ0eXBlIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjgxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo2NToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJGcGRmVGVzdDo6dGVzdE91dHB1dEdldFJlc291cmNlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO047czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjU6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSRnBkZlRlc3Q6OnRlc3RPdXRwdXRHZXRSZXNvdXJjZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjE6InRlc3RPdXRwdXRHZXRSZXNvdXJjZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/I/F/a0d8x79XC-jRSNQCgrlw b/files/I/F/a0d8x79XC-jRSNQCgrlw
deleted file mode 100644
index 30fb72276..000000000
--- a/files/I/F/a0d8x79XC-jRSNQCgrlw
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Abb63657107496ce9060908640154e6fc-7d809203b87b86de7b37410036af65fa
-s:16276:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjA6IkNsYXNzIFBvbHlub21pYWxUZXN0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjY6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE4OiJQb2x5bm9taWFsVGVzdC5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIwOS4wMi4yMDE2IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyOToiY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnMiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6NjoiU21pbGV5IjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjIxOiJzbWlsZXlAY2hpbGxlcmxhbi5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IjIwMTUgU21pbGV5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo1O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozOiJNSVQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czowOiIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjA6e319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6IjdkODA5MjAzYjg3Yjg2ZGU3YjM3NDEwMDM2YWY2NWZhIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWUiO3M6MTg6IlBvbHlub21pYWxUZXN0LnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjMyOiJ0ZXN0cy9IZWxwZXJzL1BvbHlub21pYWxUZXN0LnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6OTc4OiI8P3BocAovKioKICogQ2xhc3MgUG9seW5vbWlhbFRlc3QKICoKICogQGZpbGVzb3VyY2UgICBQb2x5bm9taWFsVGVzdC5waHAKICogQGNyZWF0ZWQgICAgICAwOS4wMi4yMDE2CiAqIEBwYWNrYWdlICAgICAgY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnMKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVRlc3RcSGVscGVyczsKCnVzZSBjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXFBvbHlub21pYWw7CnVzZSBjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGVFeGNlcHRpb247CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBQb2x5bm9taWFsIGNvdmVyYWdlIHRlc3QKICovCmZpbmFsIGNsYXNzIFBvbHlub21pYWxUZXN0IGV4dGVuZHMgVGVzdENhc2V7CgoJcHJvdGVjdGVkIFBvbHlub21pYWwgJHBvbHlub21pYWw7CgoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFVwKCk6dm9pZHsKCQkkdGhpcy0+cG9seW5vbWlhbCA9IG5ldyBQb2x5bm9taWFsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V4cCgpOnZvaWR7CgkJJHRoaXM6OmFzc2VydFNhbWUoMTQyLCAkdGhpcy0+cG9seW5vbWlhbC0+Z2V4cCgtMSkpOwoJCSR0aGlzOjphc3NlcnRTYW1lKDEzMywgJHRoaXMtPnBvbHlub21pYWwtPmdleHAoMTI4KSk7CgkJJHRoaXM6OmFzc2VydFNhbWUoMiwgICAkdGhpcy0+cG9seW5vbWlhbC0+Z2V4cCgyNTYpKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gdGVzdEdsb2dFeGNlcHRpb24oKTp2b2lkewoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb24oUVJDb2RlRXhjZXB0aW9uOjpjbGFzcyk7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbk1lc3NhZ2UoJ2xvZygwKScpOwoKCQkkdGhpcy0+cG9seW5vbWlhbC0+Z2xvZygwKTsKCX0KfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjMwOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnMiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NzoiSGVscGVycyI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnNcUG9seW5vbWlhbFRlc3QiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcSGVscGVyc1xQb2x5bm9taWFsVGVzdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJQb2x5bm9taWFsVGVzdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjQ6IlBvbHlub21pYWwgY292ZXJhZ2UgdGVzdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyOToiY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnMiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjM6e3M6MTA6IlBvbHlub21pYWwiO3M6MzY6ImNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbCI7czoxNToiUVJDb2RlRXhjZXB0aW9uIjtzOjMzOiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGVFeGNlcHRpb24iO3M6ODoiVGVzdENhc2UiO3M6MjY6IlBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjoxO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyNzoiXFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiVGVzdENhc2UiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6MTp7czo1ODoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzXFBvbHlub21pYWxUZXN0OjokcG9seW5vbWlhbCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1ODoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzXFBvbHlub21pYWxUZXN0OjokcG9seW5vbWlhbCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJwb2x5bm9taWFsIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO047czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNzoiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcUG9seW5vbWlhbCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJQb2x5bm9taWFsIjt9fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6Mzp7czo1NDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzXFBvbHlub21pYWxUZXN0OjpzZXRVcCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtOO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU0OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnNcUG9seW5vbWlhbFRlc3Q6OnNldFVwKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJzZXRVcCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NTc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcSGVscGVyc1xQb2x5bm9taWFsVGVzdDo6dGVzdEdleHAoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TjtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1NzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxIZWxwZXJzXFBvbHlub21pYWxUZXN0Ojp0ZXN0R2V4cCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoidGVzdEdleHAiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjY2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XEhlbHBlcnNcUG9seW5vbWlhbFRlc3Q6OnRlc3RHbG9nRXhjZXB0aW9uKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO047czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjY6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcSGVscGVyc1xQb2x5bm9taWFsVGVzdDo6dGVzdEdsb2dFeGNlcHRpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJ0ZXN0R2xvZ0V4Y2VwdGlvbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/I/H/qhWPDCE3uWxlecP+UUtw b/files/I/H/qhWPDCE3uWxlecP+UUtw
deleted file mode 100644
index e0ccee0fc..000000000
--- a/files/I/H/qhWPDCE3uWxlecP+UUtw
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A697a91ef3e75c0b0a5f0fe17b5004a5d-fc2a2a17bd3bf65d4617ca7a57a893a1
-s:27412:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTc6IkNsYXNzIFFSSW1hZ2VUZXN0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjY6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE1OiJRUkltYWdlVGVzdC5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIyNC4xMi4yMDE3IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyODoiY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNyBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiZmMyYTJhMTdiZDNiZjY1ZDQ2MTdjYTdhNTdhODkzYTEiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxNToiUVJJbWFnZVRlc3QucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6Mjg6InRlc3RzL091dHB1dC9RUkltYWdlVGVzdC5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjE4NjQ6Ijw/cGhwCi8qKgogKiBDbGFzcyBRUkltYWdlVGVzdAogKgogKiBAZmlsZXNvdXJjZSAgIFFSSW1hZ2VUZXN0LnBocAogKiBAY3JlYXRlZCAgICAgIDI0LjEyLjIwMTcKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0CiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dDsKCnVzZSBjaGlsbGVybGFuXFFSQ29kZVx7UVJDb2RlLCBRUk9wdGlvbnN9Owp1c2UgY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XHtRUk91dHB1dEludGVyZmFjZSwgUVJJbWFnZX07CgovKioKICogVGVzdHMgdGhlIFFSSW1hZ2Ugb3V0cHV0IG1vZHVsZQogKi8KY2xhc3MgUVJJbWFnZVRlc3QgZXh0ZW5kcyBRUk91dHB1dFRlc3RBYnN0cmFjdHsKCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldFVwKCk6dm9pZHsKCgkJaWYoIWV4dGVuc2lvbl9sb2FkZWQoJ2dkJykpewoJCQkkdGhpcy0+bWFya1Rlc3RTa2lwcGVkKCdleHQtZ2Qgbm90IGxvYWRlZCcpOwoJCQlyZXR1cm47CgkJfQoKCQlwYXJlbnQ6OnNldFVwKCk7Cgl9CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICogQGludGVybmFsCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRPdXRwdXRJbnRlcmZhY2UoUVJPcHRpb25zICRvcHRpb25zKTpRUk91dHB1dEludGVyZmFjZXsKCQlyZXR1cm4gbmV3IFFSSW1hZ2UoJG9wdGlvbnMsICR0aGlzLT5tYXRyaXgpOwoJfQoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqIEBpbnRlcm5hbAoJICovCglwdWJsaWMgZnVuY3Rpb24gdHlwZXMoKTphcnJheXsKCQlyZXR1cm4gWwoJCQkncG5nJyA9PiBbUVJDb2RlOjpPVVRQVVRfSU1BR0VfUE5HXSwKCQkJJ2dpZicgPT4gW1FSQ29kZTo6T1VUUFVUX0lNQUdFX0dJRl0sCgkJCSdqcGcnID0+IFtRUkNvZGU6Ok9VVFBVVF9JTUFHRV9KUEddLAoJCV07Cgl9CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdFNldE1vZHVsZVZhbHVlcygpOnZvaWR7CgoJCSR0aGlzLT5vcHRpb25zLT5tb2R1bGVWYWx1ZXMgPSBbCgkJCS8vIGRhdGEKCQkJMTAyNCA9PiBbMCwgMCwgMF0sCgkJCTQgICAgPT4gWzI1NSwgMjU1LCAyNTVdLAoJCV07CgoJCSR0aGlzLT5vdXRwdXRJbnRlcmZhY2UgPSAkdGhpcy0+Z2V0T3V0cHV0SW50ZXJmYWNlKCR0aGlzLT5vcHRpb25zKTsKCQkkdGhpcy0+b3V0cHV0SW50ZXJmYWNlLT5kdW1wKCk7CgoJCSR0aGlzOjphc3NlcnRUcnVlKHRydWUpOyAvLyB0cmlja2luZyB0aGUgY29kZSBjb3ZlcmFnZQoJfQoKCS8qKgoJICogQHBoYW4tc3VwcHJlc3MgUGhhblVuZGVjbGFyZWRDbGFzc1JlZmVyZW5jZQoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdE91dHB1dEdldFJlc291cmNlKCk6dm9pZHsKCQkkdGhpcy0+b3B0aW9ucy0+cmV0dXJuUmVzb3VyY2UgPSB0cnVlOwoJCSR0aGlzLT5vdXRwdXRJbnRlcmZhY2UgICAgICAgICA9ICR0aGlzLT5nZXRPdXRwdXRJbnRlcmZhY2UoJHRoaXMtPm9wdGlvbnMpOwoKCQkkYWN0dWFsID0gJHRoaXMtPm91dHB1dEludGVyZmFjZS0+ZHVtcCgpOwoKCQkvKiogQG5vaW5zcGVjdGlvbiBQaHBFbGVtZW50SXNOb3RBdmFpbGFibGVJbkN1cnJlbnRQaHBWZXJzaW9uSW5zcGVjdGlvbiAqLwoJCVxQSFBfTUFKT1JfVkVSU0lPTiA+PSA4CgkJCT8gJHRoaXM6OmFzc2VydEluc3RhbmNlT2YoXEdkSW1hZ2U6OmNsYXNzLCAkYWN0dWFsKQoJCQk6ICR0aGlzOjphc3NlcnRJc1Jlc291cmNlKCRhY3R1YWwpOwoJfQoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjI5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjY6Ik91dHB1dCI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjQxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUkltYWdlVGVzdCI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJJbWFnZVRlc3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToiUVJJbWFnZVRlc3QiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMxOiJUZXN0cyB0aGUgUVJJbWFnZSBvdXRwdXQgbW9kdWxlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjI4OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTo0OntzOjY6IlFSQ29kZSI7czoyNDoiY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlIjtzOjk6IlFST3B0aW9ucyI7czoyNzoiY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zIjtzOjE3OiJRUk91dHB1dEludGVyZmFjZSI7czo0MjoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0SW50ZXJmYWNlIjtzOjc6IlFSSW1hZ2UiO3M6MzI6ImNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJPdXRwdXRUZXN0QWJzdHJhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMDoiUVJPdXRwdXRUZXN0QWJzdHJhY3QiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjU6e3M6NTA6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2VUZXN0OjpzZXRVcCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUkltYWdlVGVzdDo6c2V0VXAoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6InNldFVwIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo2MzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJJbWFnZVRlc3Q6OmdldE91dHB1dEludGVyZmFjZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjYzOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUkltYWdlVGVzdDo6Z2V0T3V0cHV0SW50ZXJmYWNlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxODoiZ2V0T3V0cHV0SW50ZXJmYWNlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6Im9wdGlvbnMiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyODoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6IlFST3B0aW9ucyI7fX1zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFST3V0cHV0SW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTc6IlFST3V0cHV0SW50ZXJmYWNlIjt9fX1zOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUkltYWdlVGVzdDo6dHlwZXMoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjI6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXREb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJJbWFnZVRlc3Q6OnR5cGVzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJ0eXBlcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fXM6NjQ6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFSSW1hZ2VUZXN0Ojp0ZXN0U2V0TW9kdWxlVmFsdWVzKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2NDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJJbWFnZVRlc3Q6OnRlc3RTZXRNb2R1bGVWYWx1ZXMoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE5OiJ0ZXN0U2V0TW9kdWxlVmFsdWVzIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjYwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo2NjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJJbWFnZVRlc3Q6OnRlc3RPdXRwdXRHZXRSZXNvdXJjZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMzoicGhhbi1zdXBwcmVzcyI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6Mjg6IlBoYW5VbmRlY2xhcmVkQ2xhc3NSZWZlcmVuY2UiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjc0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUkltYWdlVGVzdDo6dGVzdE91dHB1dEdldFJlc291cmNlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMToidGVzdE91dHB1dEdldFJlc291cmNlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjc3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9fQ==";
\ No newline at end of file
diff --git a/files/J/P/ZznDVjUum4wVQBxpkQsQ b/files/J/P/ZznDVjUum4wVQBxpkQsQ
deleted file mode 100644
index 23ba63483..000000000
--- a/files/J/P/ZznDVjUum4wVQBxpkQsQ
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A6e4f69c48ba9cbe306a6007c692f0ffe-a575446d8cd3f74867a0ef914d9ffa3f
-s:20928:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTQ6IkNsYXNzIEFscGhhTnVtIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjY6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEyOiJBbHBoYU51bS5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIyNS4xMS4yMDE1IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyMjoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNSBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiYTU3NTQ0NmQ4Y2QzZjc0ODY3YTBlZjkxNGQ5ZmZhM2YiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxMjoiQWxwaGFOdW0ucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6MjE6InNyYy9EYXRhL0FscGhhTnVtLnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6MTMxNjoiPD9waHAKLyoqCiAqIENsYXNzIEFscGhhTnVtCiAqCiAqIEBmaWxlc291cmNlICAgQWxwaGFOdW0ucGhwCiAqIEBjcmVhdGVkICAgICAgMjUuMTEuMjAxNQogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlXERhdGEKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxEYXRhOwoKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTsKCnVzZSBmdW5jdGlvbiBvcmQsIHNwcmludGY7CgovKioKICogQWxwaGFudW1lcmljIG1vZGU6IDAgdG8gOSwgQSB0byBaLCBzcGFjZSwgJCAlICogKyAtIC4gLyA6CiAqCiAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguMy4zCiAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguNC4zCiAqLwpmaW5hbCBjbGFzcyBBbHBoYU51bSBleHRlbmRzIFFSRGF0YUFic3RyYWN0ewoKCXByb3RlY3RlZCBpbnQgJGRhdGFtb2RlID0gUVJDb2RlOjpEQVRBX0FMUEhBTlVNOwoKCXByb3RlY3RlZCBhcnJheSAkbGVuZ3RoQml0cyA9IFs5LCAxMSwgMTNdOwoKCS8qKgoJICogQGluaGVyaXRkb2MKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHdyaXRlKHN0cmluZyAkZGF0YSk6dm9pZHsKCgkJZm9yKCRpID0gMDsgJGkgKyAxIDwgJHRoaXMtPnN0cmxlbjsgJGkgKz0gMil7CgkJCSR0aGlzLT5iaXRCdWZmZXItPnB1dCgkdGhpcy0+Z2V0Q2hhckNvZGUoJGRhdGFbJGldKSAqIDQ1ICsgJHRoaXMtPmdldENoYXJDb2RlKCRkYXRhWyRpICsgMV0pLCAxMSk7CgkJfQoKCQlpZigkaSA8ICR0aGlzLT5zdHJsZW4pewoJCQkkdGhpcy0+Yml0QnVmZmVyLT5wdXQoJHRoaXMtPmdldENoYXJDb2RlKCRkYXRhWyRpXSksIDYpOwoJCX0KCgl9CgoJLyoqCgkgKiBnZXQgdGhlIGNvZGUgZm9yIHRoZSBnaXZlbiBjaGFyYWN0ZXIKCSAqCgkgKiBAdGhyb3dzIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24gb24gYW4gaWxsZWdhbCBjaGFyYWN0ZXIgb2NjdXJlbmNlCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRDaGFyQ29kZShzdHJpbmcgJGNocik6aW50ewoKCQlpZighaXNzZXQoJHRoaXM6OkNIQVJfTUFQX0FMUEhBTlVNWyRjaHJdKSl7CgkJCXRocm93IG5ldyBRUkNvZGVEYXRhRXhjZXB0aW9uKHNwcmludGYoJ2lsbGVnYWwgY2hhcjogIiVzIiBbJWRdJywgJGNociwgb3JkKCRjaHIpKSk7CgkJfQoKCQlyZXR1cm4gJHRoaXM6OkNIQVJfTUFQX0FMUEhBTlVNWyRjaHJdOwoJfQoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjIzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjIzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6IkRhdGEiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcQWxwaGFOdW0iO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEFscGhhTnVtIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiQWxwaGFOdW0iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjU3OiJBbHBoYW51bWVyaWMgbW9kZTogMCB0byA5LCBBIHRvIFosIHNwYWNlLCAkICUgKiArIC0gLiAvIDoiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NjU6IklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguMy4zCklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguNC4zIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MjI6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGEiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjE6e3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjE7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJRUkRhdGFBYnN0cmFjdCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YToyOntzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxBbHBoYU51bTo6JGRhdGFtb2RlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxBbHBoYU51bTo6JGRhdGFtb2RlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiZGF0YW1vZGUiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TjtzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6REFUQV9BTFBIQU5VTSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEFscGhhTnVtOjokbGVuZ3RoQml0cyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcQWxwaGFOdW06OiRsZW5ndGhCaXRzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6Imxlbmd0aEJpdHMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TjtzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoxMToiWzksIDExLCAxM10iO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjI6e3M6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEFscGhhTnVtOjp3cml0ZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdGRvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEFscGhhTnVtOjp3cml0ZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NToid3JpdGUiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoiZGF0YSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEFscGhhTnVtOjpnZXRDaGFyQ29kZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozNjoiZ2V0IHRoZSBjb2RlIGZvciB0aGUgZ2l2ZW4gY2hhcmFjdGVyIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xUaHJvd3MiOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkNvZGVEYXRhRXhjZXB0aW9uIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTk6IlFSQ29kZURhdGFFeGNlcHRpb24iO319czo3OiIAKgBuYW1lIjtzOjY6InRocm93cyI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzM6Im9uIGFuIGlsbGVnYWwgY2hhcmFjdGVyIG9jY3VyZW5jZSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEFscGhhTnVtOjpnZXRDaGFyQ29kZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6ImdldENoYXJDb2RlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjM6ImNociI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9fQ==";
\ No newline at end of file
diff --git a/files/K/D/2usSU7Slz67Vrje5pseA b/files/K/D/2usSU7Slz67Vrje5pseA
deleted file mode 100644
index d1f991ae8..000000000
--- a/files/K/D/2usSU7Slz67Vrje5pseA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Aa1f6779869c09e75ad1f94f294dd9ca2-7e9da54c99553e1ee4de1c7d2747ab06
-s:55196:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzE6IkNsYXNzIERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6Mjk6IkRhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3QucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMjQuMTEuMjAxNyI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjY6ImNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjY6IlNtaWxleSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoyMToic21pbGV5QGNoaWxsZXJsYW4ubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiIyMDE3IFNtaWxleSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzoiTUlUIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiI3ZTlkYTU0Yzk5NTUzZTFlZTRkZTFjN2QyNzQ3YWIwNiI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjI5OiJEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0LnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjQwOiJ0ZXN0cy9EYXRhL0RhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3QucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czozMzc5OiI8P3BocAovKioKICogQ2xhc3MgRGF0YWludGVyZmFjZVRlc3RBYnN0cmFjdAogKgogKiBAZmlsZXNvdXJjZSAgIERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3QucGhwCiAqIEBjcmVhdGVkICAgICAgMjQuMTEuMjAxNwogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhCiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGE7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOwp1c2UgY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CnVzZSBjaGlsbGVybGFuXFFSQ29kZVxEYXRhXHtRUkNvZGVEYXRhRXhjZXB0aW9uLCBRUkRhdGFJbnRlcmZhY2UsIFFSTWF0cml4fTsKdXNlIFJlZmxlY3Rpb25DbGFzczsKCnVzZSBmdW5jdGlvbiBzdHJfcmVwZWF0OwoKLyoqCiAqIFRoZSBkYXRhIGludGVyZmFjZSB0ZXN0IGFic3RyYWN0CiAqLwphYnN0cmFjdCBjbGFzcyBEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0IGV4dGVuZHMgVGVzdENhc2V7CgoJLyoqIEBpbnRlcm5hbCAqLwoJcHJvdGVjdGVkIFJlZmxlY3Rpb25DbGFzcyAkcmVmbGVjdGlvbjsKCS8qKiBAaW50ZXJuYWwgKi8KCXByb3RlY3RlZCBRUkRhdGFJbnRlcmZhY2UgJGRhdGFJbnRlcmZhY2U7CgkvKiogQGludGVybmFsICovCglwcm90ZWN0ZWQgc3RyaW5nICR0ZXN0ZGF0YTsKCS8qKiBAaW50ZXJuYWwgKi8KCXByb3RlY3RlZCBhcnJheSAgJGV4cGVjdGVkOwoKCS8qKgoJICogQGludGVybmFsCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRVcCgpOnZvaWR7CgkJJHRoaXMtPmRhdGFJbnRlcmZhY2UgPSAkdGhpcy0+Z2V0RGF0YUludGVyZmFjZUluc3RhbmNlKG5ldyBRUk9wdGlvbnMoWyd2ZXJzaW9uJyA9PiA0XSkpOwoJCSR0aGlzLT5yZWZsZWN0aW9uICAgID0gbmV3IFJlZmxlY3Rpb25DbGFzcygkdGhpcy0+ZGF0YUludGVyZmFjZSk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGEgZGF0YSBpbnRlcmZhY2UgaW5zdGFuY2UKCSAqCgkgKiBAaW50ZXJuYWwKCSAqLwoJYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERhdGFJbnRlcmZhY2VJbnN0YW5jZShRUk9wdGlvbnMgJG9wdGlvbnMpOlFSRGF0YUludGVyZmFjZTsKCgkvKioKCSAqIFZlcmlmaWVzIHRoZSBkYXRhIGludGVyZmFjZSBpbnN0YW5jZQoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdEluc3RhbmNlKCk6dm9pZHsKCQkkdGhpczo6YXNzZXJ0SW5zdGFuY2VPZihRUkRhdGFJbnRlcmZhY2U6OmNsYXNzLCAkdGhpcy0+ZGF0YUludGVyZmFjZSk7Cgl9CgoJLyoqCgkgKiBUZXN0cyBlY2MgbWFza2luZyBhbmQgdmVyaWZpZXMgYWdhaW5zdCBhIHNhbXBsZQoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdE1hc2tFY2MoKTp2b2lkewoJCSR0aGlzLT5kYXRhSW50ZXJmYWNlLT5zZXREYXRhKCR0aGlzLT50ZXN0ZGF0YSk7CgoJCSRtYXNrRUNDID0gJHRoaXMtPnJlZmxlY3Rpb24tPmdldE1ldGhvZCgnbWFza0VDQycpOwoJCSRtYXNrRUNDLT5zZXRBY2Nlc3NpYmxlKHRydWUpOwoKCQkkdGhpczo6YXNzZXJ0U2FtZSgkdGhpcy0+ZXhwZWN0ZWQsICRtYXNrRUNDLT5pbnZva2UoJHRoaXMtPmRhdGFJbnRlcmZhY2UpKTsKCX0KCgkvKioKCSAqIEBzZWUgdGVzdEluaXRNYXRyaXgoKQoJICogQGludGVybmFsCgkgKiBAcmV0dXJuIGludFtdW10KCSAqLwoJcHVibGljIGZ1bmN0aW9uIE1hc2tQYXR0ZXJuUHJvdmlkZXIoKTphcnJheXsKCQlyZXR1cm4gW1swXSwgWzFdLCBbMl0sIFszXSwgWzRdLCBbNV0sIFs2XSwgWzddXTsKCX0KCgkvKioKCSAqIFRlc3RzIGluaXRpYWxpemluZyB0aGUgZGF0YSBtYXRyaXgKCSAqCgkgKiBAZGF0YVByb3ZpZGVyIE1hc2tQYXR0ZXJuUHJvdmlkZXIKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RJbml0TWF0cml4KGludCAkbWFza1BhdHRlcm4pOnZvaWR7CgkJJHRoaXMtPmRhdGFJbnRlcmZhY2UtPnNldERhdGEoJHRoaXMtPnRlc3RkYXRhKTsKCgkJJG1hdHJpeCA9ICR0aGlzLT5kYXRhSW50ZXJmYWNlLT5pbml0TWF0cml4KCRtYXNrUGF0dGVybik7CgoJCSR0aGlzOjphc3NlcnRJbnN0YW5jZU9mKFFSTWF0cml4OjpjbGFzcywgJG1hdHJpeCk7CgkJJHRoaXM6OmFzc2VydFNhbWUoJG1hc2tQYXR0ZXJuLCAkbWF0cml4LT5tYXNrUGF0dGVybigpKTsKCX0KCgkvKioKCSAqIFRlc3RzIGdldHRpbmcgdGhlIG1pbmltdW0gUVIgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGRhdGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRNaW5pbXVtVmVyc2lvbigpOnZvaWR7CgkJJHRoaXMtPmRhdGFJbnRlcmZhY2UtPnNldERhdGEoJHRoaXMtPnRlc3RkYXRhKTsKCgkJJGdldE1pbmltdW1WZXJzaW9uID0gJHRoaXMtPnJlZmxlY3Rpb24tPmdldE1ldGhvZCgnZ2V0TWluaW11bVZlcnNpb24nKTsKCQkkZ2V0TWluaW11bVZlcnNpb24tPnNldEFjY2Vzc2libGUodHJ1ZSk7CgoJCSR0aGlzOjphc3NlcnRTYW1lKDEsICRnZXRNaW5pbXVtVmVyc2lvbi0+aW52b2tlKCR0aGlzLT5kYXRhSW50ZXJmYWNlKSk7Cgl9CgoJLyoqCgkgKiBUZXN0cyBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gdGhlIGRhdGEgZXhjZWVkcyB0aGUgbWF4aW11bSB2ZXJzaW9uIHdoaWxlIGF1dG8gZGV0ZWN0aW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0TWluaW11bVZlcnNpb25FeGNlcHRpb24oKTp2b2lkewoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb24oUVJDb2RlRGF0YUV4Y2VwdGlvbjo6Y2xhc3MpOwoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb25NZXNzYWdlKCdkYXRhIGV4Y2VlZHMnKTsKCgkJJHRoaXMtPmRhdGFJbnRlcmZhY2UgPSAkdGhpcy0+Z2V0RGF0YUludGVyZmFjZUluc3RhbmNlKG5ldyBRUk9wdGlvbnMoWyd2ZXJzaW9uJyA9PiBRUkNvZGU6OlZFUlNJT05fQVVUT10pKTsKCQkkdGhpcy0+ZGF0YUludGVyZmFjZS0+c2V0RGF0YShzdHJfcmVwZWF0KCR0aGlzLT50ZXN0ZGF0YSwgMTMzNykpOwoJfQoKCS8qKgoJICogVGVzdHMgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBvbiBkYXRhIG92ZXJmbG93CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29kZUxlbmd0aE92ZXJmbG93RXhjZXB0aW9uKCk6dm9pZHsKCQkkdGhpcy0+ZXhwZWN0RXhjZXB0aW9uKFFSQ29kZURhdGFFeGNlcHRpb246OmNsYXNzKTsKCQkkdGhpcy0+ZXhwZWN0RXhjZXB0aW9uTWVzc2FnZSgnY29kZSBsZW5ndGggb3ZlcmZsb3cnKTsKCgkJJHRoaXMtPmRhdGFJbnRlcmZhY2UtPnNldERhdGEoc3RyX3JlcGVhdCgkdGhpcy0+dGVzdGRhdGEsIDEzMzcpKTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyNzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6IkRhdGEiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czo1MzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3QiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTM6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjU6IkRhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3QiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMyOiJUaGUgZGF0YSBpbnRlcmZhY2UgdGVzdCBhYnN0cmFjdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyNjoiY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGEiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjc6e3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO3M6OToiUVJPcHRpb25zIjtzOjI3OiJjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO3M6ODoiVGVzdENhc2UiO3M6MjY6IlBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlIjtzOjE5OiJRUkNvZGVEYXRhRXhjZXB0aW9uIjtzOjQyOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24iO3M6MTU6IlFSRGF0YUludGVyZmFjZSI7czozODoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2UiO3M6ODoiUVJNYXRyaXgiO3M6MzE6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MTU6IlJlZmxlY3Rpb25DbGFzcyI7czoxNToiUmVmbGVjdGlvbkNsYXNzIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjoxO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyNzoiXFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiVGVzdENhc2UiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6NDp7czo2NjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3Q6OiRyZWZsZWN0aW9uIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcRGF0YWludGVyZmFjZVRlc3RBYnN0cmFjdDo6JHJlZmxlY3Rpb24iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoicmVmbGVjdGlvbiI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoxNjoiXFJlZmxlY3Rpb25DbGFzcyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJSZWZsZWN0aW9uQ2xhc3MiO319fXM6Njk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0OjokZGF0YUludGVyZmFjZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3Q6OiRkYXRhSW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6ImRhdGFJbnRlcmZhY2UiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtOO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJRUkRhdGFJbnRlcmZhY2UiO319fXM6NjQ6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0OjokdGVzdGRhdGEiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjQ6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0OjokdGVzdGRhdGEiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJ0ZXN0ZGF0YSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9fXM6NjQ6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0OjokZXhwZWN0ZWQiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjQ6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0OjokZXhwZWN0ZWQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJleHBlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6OTp7czo2MjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3Q6OnNldFVwKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2MjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3Q6OnNldFVwKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJzZXRVcCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6ODE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0OjpnZXREYXRhSW50ZXJmYWNlSW5zdGFuY2UoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzM6IlJldHVybnMgYSBkYXRhIGludGVyZmFjZSBpbnN0YW5jZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo4MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3Q6OmdldERhdGFJbnRlcmZhY2VJbnN0YW5jZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjQ6ImdldERhdGFJbnRlcmZhY2VJbnN0YW5jZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjoxO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJvcHRpb25zIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjg6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJRUk9wdGlvbnMiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6IlFSRGF0YUludGVyZmFjZSI7fX19czo2OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3Q6OnRlc3RJbnN0YW5jZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozNjoiVmVyaWZpZXMgdGhlIGRhdGEgaW50ZXJmYWNlIGluc3RhbmNlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Njk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0Ojp0ZXN0SW5zdGFuY2UoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJ0ZXN0SW5zdGFuY2UiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjY4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcRGF0YWludGVyZmFjZVRlc3RBYnN0cmFjdDo6dGVzdE1hc2tFY2MoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NDc6IlRlc3RzIGVjYyBtYXNraW5nIGFuZCB2ZXJpZmllcyBhZ2FpbnN0IGEgc2FtcGxlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Njg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0Ojp0ZXN0TWFza0VjYygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6InRlc3RNYXNrRWNjIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjYyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo3NjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3Q6Ok1hc2tQYXR0ZXJuUHJvdmlkZXIoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjM6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjU0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4iOjE6e3M6NjE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXHRlc3RJbml0TWF0cml4KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNDoidGVzdEluaXRNYXRyaXgiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjc6IgAqAG5hbWUiO3M6NjoicmV0dXJuIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjcxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjc2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcRGF0YWludGVyZmFjZVRlc3RBYnN0cmFjdDo6TWFza1BhdHRlcm5Qcm92aWRlcigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTk6Ik1hc2tQYXR0ZXJuUHJvdmlkZXIiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX1zOjcxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcRGF0YWludGVyZmFjZVRlc3RBYnN0cmFjdDo6dGVzdEluaXRNYXRyaXgoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzQ6IlRlc3RzIGluaXRpYWxpemluZyB0aGUgZGF0YSBtYXRyaXgiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMjoiZGF0YVByb3ZpZGVyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxOToiTWFza1BhdHRlcm5Qcm92aWRlciI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6ODA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NzE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0Ojp0ZXN0SW5pdE1hdHJpeCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTQ6InRlc3RJbml0TWF0cml4Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjExOiJtYXNrUGF0dGVybiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo4NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6Nzg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0Ojp0ZXN0R2V0TWluaW11bVZlcnNpb24oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTU6IlRlc3RzIGdldHRpbmcgdGhlIG1pbmltdW0gUVIgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGRhdGEiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo3ODoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3Q6OnRlc3RHZXRNaW5pbXVtVmVyc2lvbigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjE6InRlc3RHZXRNaW5pbXVtVmVyc2lvbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5NztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6ODc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0Ojp0ZXN0R2V0TWluaW11bVZlcnNpb25FeGNlcHRpb24oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6OTQ6IlRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGUgZGF0YSBleGNlZWRzIHRoZSBtYXhpbXVtIHZlcnNpb24gd2hpbGUgYXV0byBkZXRlY3RpbmciO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6ODc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0Ojp0ZXN0R2V0TWluaW11bVZlcnNpb25FeGNlcHRpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjMwOiJ0ZXN0R2V0TWluaW11bVZlcnNpb25FeGNlcHRpb24iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTA5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo4ODoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3Q6OnRlc3RDb2RlTGVuZ3RoT3ZlcmZsb3dFeGNlcHRpb24oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NDg6IlRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gb24gZGF0YSBvdmVyZmxvdyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo4ODoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3Q6OnRlc3RDb2RlTGVuZ3RoT3ZlcmZsb3dFeGNlcHRpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjMxOiJ0ZXN0Q29kZUxlbmd0aE92ZXJmbG93RXhjZXB0aW9uIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEyMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/K/L/fZHuAP6-KlBaY1CAbrFg b/files/K/L/fZHuAP6-KlBaY1CAbrFg
deleted file mode 100644
index 9fe4d885d..000000000
--- a/files/K/L/fZHuAP6-KlBaY1CAbrFg
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Ae0f9ff4335e7dcabde94b24b5b3d838d-2a3120ea49297fef44e19ec09a41fb3c
-s:7448:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjU6IkNsYXNzIFFSQ29kZURhdGFFeGNlcHRpb24iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjM6IlFSQ29kZURhdGFFeGNlcHRpb24ucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMDkuMTIuMjAxNSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjI6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGEiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6NjoiU21pbGV5IjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjIxOiJzbWlsZXlAY2hpbGxlcmxhbi5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IjIwMTUgU21pbGV5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo1O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozOiJNSVQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czowOiIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjA6e319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6IjJhMzEyMGVhNDkyOTdmZWY0NGUxOWVjMDlhNDFmYjNjIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWUiO3M6MjM6IlFSQ29kZURhdGFFeGNlcHRpb24ucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6MzI6InNyYy9EYXRhL1FSQ29kZURhdGFFeGNlcHRpb24ucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czozODE6Ijw/cGhwCi8qKgogKiBDbGFzcyBRUkNvZGVEYXRhRXhjZXB0aW9uCiAqCiAqIEBmaWxlc291cmNlICAgUVJDb2RlRGF0YUV4Y2VwdGlvbi5waHAKICogQGNyZWF0ZWQgICAgICAwOS4xMi4yMDE1CiAqIEBwYWNrYWdlICAgICAgY2hpbGxlcmxhblxRUkNvZGVcRGF0YQogKiBAYXV0aG9yICAgICAgIFNtaWxleSA8c21pbGV5QGNoaWxsZXJsYW4ubmV0PgogKiBAY29weXJpZ2h0ICAgIDIwMTUgU21pbGV5CiAqIEBsaWNlbnNlICAgICAgTUlUCiAqLwoKbmFtZXNwYWNlIGNoaWxsZXJsYW5cUVJDb2RlXERhdGE7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlRXhjZXB0aW9uOwoKY2xhc3MgUVJDb2RlRGF0YUV4Y2VwdGlvbiBleHRlbmRzIFFSQ29kZUV4Y2VwdGlvbnt9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6MjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiRGF0YSI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkNvZGVEYXRhRXhjZXB0aW9uIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTE6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkNvZGVEYXRhRXhjZXB0aW9uIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTk6IlFSQ29kZURhdGFFeGNlcHRpb24iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM0OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlRXhjZXB0aW9uIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6IlFSQ29kZUV4Y2VwdGlvbiI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9fQ==";
\ No newline at end of file
diff --git a/files/M/I/0kPNtoyEiRWyw6jaVFDg b/files/M/I/0kPNtoyEiRWyw6jaVFDg
deleted file mode 100644
index 57346e0a4..000000000
--- a/files/M/I/0kPNtoyEiRWyw6jaVFDg
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Af26a0846c840be604a792acafaeee293-ccb04a6531246e8b73271d8cb0d80ed1
-s:21148:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTE6IkNsYXNzIEthbmppIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjY6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjk6IkthbmppLnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjI1LjExLjIwMTUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjIyOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjY6IlNtaWxleSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoyMToic21pbGV5QGNoaWxsZXJsYW4ubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiIyMDE1IFNtaWxleSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzoiTUlUIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiJjY2IwNGE2NTMxMjQ2ZThiNzMyNzFkOGNiMGQ4MGVkMSI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjk6IkthbmppLnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjE4OiJzcmMvRGF0YS9LYW5qaS5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjE0NDY6Ijw/cGhwCi8qKgogKiBDbGFzcyBLYW5qaQogKgogKiBAZmlsZXNvdXJjZSAgIEthbmppLnBocAogKiBAY3JlYXRlZCAgICAgIDI1LjExLjIwMTUKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVxEYXRhCiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNSBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVcRGF0YTsKCnVzZSBjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU7Cgp1c2UgZnVuY3Rpb24gbWJfc3RybGVuLCBvcmQsIHNwcmludGYsIHN0cmxlbjsKCi8qKgogKiBLYW5qaSBtb2RlOiBkb3VibGUtYnl0ZSBjaGFyYWN0ZXJzIGZyb20gdGhlIFNoaWZ0IEpJUyBjaGFyYWN0ZXIgc2V0CiAqCiAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguMy41CiAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguNC41CiAqLwpmaW5hbCBjbGFzcyBLYW5qaSBleHRlbmRzIFFSRGF0YUFic3RyYWN0ewoKCXByb3RlY3RlZCBpbnQgJGRhdGFtb2RlID0gUVJDb2RlOjpEQVRBX0tBTkpJOwoKCXByb3RlY3RlZCBhcnJheSAkbGVuZ3RoQml0cyA9IFs4LCAxMCwgMTJdOwoKCS8qKgoJICogQGluaGVyaXRkb2MKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExlbmd0aChzdHJpbmcgJGRhdGEpOmludHsKCQlyZXR1cm4gbWJfc3RybGVuKCRkYXRhLCAnU0pJUycpOwoJfQoKCS8qKgoJICogQGluaGVyaXRkb2MKCSAqCgkgKiBAdGhyb3dzIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24gb24gYW4gaWxsZWdhbCBjaGFyYWN0ZXIgb2NjdXJlbmNlCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiB3cml0ZShzdHJpbmcgJGRhdGEpOnZvaWR7CgkJJGxlbiA9IHN0cmxlbigkZGF0YSk7CgoJCWZvcigkaSA9IDA7ICRpICsgMSA8ICRsZW47ICRpICs9IDIpewoJCQkkYyA9ICgoMHhmZiAmIG9yZCgkZGF0YVskaV0pKSA8PCA4KSB8ICgweGZmICYgb3JkKCRkYXRhWyRpICsgMV0pKTsKCgkJCWlmKCRjID49IDB4ODE0MCAmJiAkYyA8PSAweDlGRkMpewoJCQkJJGMgLT0gMHg4MTQwOwoJCQl9CgkJCWVsc2VpZigkYyA+PSAweEUwNDAgJiYgJGMgPD0gMHhFQkJGKXsKCQkJCSRjIC09IDB4QzE0MDsKCQkJfQoJCQllbHNlewoJCQkJdGhyb3cgbmV3IFFSQ29kZURhdGFFeGNlcHRpb24oc3ByaW50ZignaWxsZWdhbCBjaGFyIGF0ICVkIFslZF0nLCAkaSArIDEsICRjKSk7CgkJCX0KCgkJCSR0aGlzLT5iaXRCdWZmZXItPnB1dCgoKCgkYyA+PiA4KSAmIDB4ZmYpICogMHhDMCkgKyAoJGMgJiAweGZmKSwgMTMpOwoKCQl9CgoJCWlmKCRpIDwgJGxlbil7CgkJCXRocm93IG5ldyBRUkNvZGVEYXRhRXhjZXB0aW9uKHNwcmludGYoJ2lsbGVnYWwgY2hhciBhdCAlZCcsICRpICsgMSkpOwoJCX0KCgl9Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6MjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiRGF0YSI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjI5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxLYW5qaSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyOToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcS2FuamkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJLYW5qaSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Njc6IkthbmppIG1vZGU6IGRvdWJsZS1ieXRlIGNoYXJhY3RlcnMgZnJvbSB0aGUgU2hpZnQgSklTIGNoYXJhY3RlciBzZXQiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NjU6IklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguMy41CklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguNC41IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MjI6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGEiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjE6e3M6NjoiUVJDb2RlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGUiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjE7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFBYnN0cmFjdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJRUkRhdGFBYnN0cmFjdCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YToyOntzOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxLYW5qaTo6JGRhdGFtb2RlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxLYW5qaTo6JGRhdGFtb2RlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiZGF0YW1vZGUiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TjtzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czozNzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6REFUQV9LQU5KSSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEthbmppOjokbGVuZ3RoQml0cyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcS2Fuamk6OiRsZW5ndGhCaXRzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6Imxlbmd0aEJpdHMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TjtzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoxMToiWzgsIDEwLCAxMl0iO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjI6e3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEthbmppOjpnZXRMZW5ndGgoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXRkb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxLYW5qaTo6Z2V0TGVuZ3RoKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJnZXRMZW5ndGgiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoiZGF0YSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czozODoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcS2Fuamk6OndyaXRlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0ZG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFRocm93cyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxOToiUVJDb2RlRGF0YUV4Y2VwdGlvbiI7fX1zOjc6IgAqAG5hbWUiO3M6NjoidGhyb3dzIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozMzoib24gYW4gaWxsZWdhbCBjaGFyYWN0ZXIgb2NjdXJlbmNlIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozODoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcS2Fuamk6OndyaXRlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJ3cml0ZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJkYXRhIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9fQ==";
\ No newline at end of file
diff --git a/files/M/M/wXV2gKJYrjfI30y0YfXA b/files/M/M/wXV2gKJYrjfI30y0YfXA
deleted file mode 100644
index a7fcdc612..000000000
--- a/files/M/M/wXV2gKJYrjfI30y0YfXA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A3aa6c1954bc7440479ae9c89c6a6035c-4ab983d63128bc877422ad8887b683ef
-s:53896:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjY6IkNsYXNzIFFST3V0cHV0VGVzdEFic3RyYWN0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjY6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI0OiJRUk91dHB1dFRlc3RBYnN0cmFjdC5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIyNC4xMi4yMDE3IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyODoiY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNyBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiNGFiOTgzZDYzMTI4YmM4Nzc0MjJhZDg4ODdiNjgzZWYiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoyNDoiUVJPdXRwdXRUZXN0QWJzdHJhY3QucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6Mzc6InRlc3RzL091dHB1dC9RUk91dHB1dFRlc3RBYnN0cmFjdC5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjM4NTk6Ijw/cGhwCi8qKgogKiBDbGFzcyBRUk91dHB1dFRlc3RBYnN0cmFjdAogKgogKiBAZmlsZXNvdXJjZSAgIFFST3V0cHV0VGVzdEFic3RyYWN0LnBocAogKiBAY3JlYXRlZCAgICAgIDI0LjEyLjIwMTcKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0CiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dDsKCnVzZSBjaGlsbGVybGFuXFFSQ29kZVx7UVJDb2RlLCBRUk9wdGlvbnN9Owp1c2UgY2hpbGxlcmxhblxRUkNvZGVcRGF0YVx7Qnl0ZSwgUVJNYXRyaXh9Owp1c2UgY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XHtRUkNvZGVPdXRwdXRFeGNlcHRpb24sIFFST3V0cHV0SW50ZXJmYWNlfTsKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwoKdXNlIGZ1bmN0aW9uIGZpbGVfZXhpc3RzLCBpbl9hcnJheSwgbWtkaXI7Cgp1c2UgY29uc3QgUEhQX09TX0ZBTUlMWSwgUEhQX1ZFUlNJT05fSUQ7CgovKioKICogVGVzdCBhYnN0cmFjdCBmb3IgdGhlIHNldmVyYWwgKGJ1aWx0LWluKSBvdXRwdXQgbW9kdWxlcywKICogc2hvdWxkIGFsc28gYmUgdXNlZCB0byB0ZXN0IGN1c3RvbSBvdXRwdXQgbW9kdWxlcwogKi8KYWJzdHJhY3QgY2xhc3MgUVJPdXRwdXRUZXN0QWJzdHJhY3QgZXh0ZW5kcyBUZXN0Q2FzZXsKCgkvKiogQGludGVybmFsICAqLwoJcHJvdGVjdGVkIHN0cmluZyAkYnVpbGRkaXIgPSBfX0RJUl9fLicvLi4vLi4vLmJ1aWxkL291dHB1dF90ZXN0JzsKCS8qKiBAaW50ZXJuYWwgICovCglwcm90ZWN0ZWQgUVJPdXRwdXRJbnRlcmZhY2UgJG91dHB1dEludGVyZmFjZTsKCS8qKiBAaW50ZXJuYWwgICovCglwcm90ZWN0ZWQgUVJPcHRpb25zICRvcHRpb25zOwoJLyoqIEBpbnRlcm5hbCAgKi8KCXByb3RlY3RlZCBRUk1hdHJpeCAkbWF0cml4OwoKCS8qKgoJICogQXR0ZW1wdHMgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHVuZGVyIC8uYnVpbGQgYW5kIGluc3RhbmNlcyBzZXZlcmFsIHJlcXVpcmVkIG9iamVjdHMKCSAqCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFVwKCk6dm9pZHsKCgkJaWYoIWZpbGVfZXhpc3RzKCR0aGlzLT5idWlsZGRpcikpewoJCQlta2RpcigkdGhpcy0+YnVpbGRkaXIsIDA3NzcsIHRydWUpOwoJCX0KCgkJJHRoaXMtPm9wdGlvbnMgICAgICAgICA9IG5ldyBRUk9wdGlvbnM7CgkJJHRoaXMtPm1hdHJpeCAgICAgICAgICA9IChuZXcgQnl0ZSgkdGhpcy0+b3B0aW9ucywgJ3Rlc3RkYXRhJykpLT5pbml0TWF0cml4KDApOwoJCSR0aGlzLT5vdXRwdXRJbnRlcmZhY2UgPSAkdGhpcy0+Z2V0T3V0cHV0SW50ZXJmYWNlKCR0aGlzLT5vcHRpb25zKTsKCX0KCgkvKioKCSAqIFJldHVybnMgYSBRUk91dHB1dEludGVyZmFjZSBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zIGFuZCB1c2luZyAkdGhpcy0+bWF0cml4CgkgKgoJICogQGludGVybmFsCgkgKi8KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRPdXRwdXRJbnRlcmZhY2UoUVJPcHRpb25zICRvcHRpb25zKTpRUk91dHB1dEludGVyZmFjZTsKCgkvKioKCSAqIFZhbGlkYXRlIHRoZSBpbnN0YW5jZSBvZiB0aGUgaW50ZXJmYWNlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0SW5zdGFuY2UoKTp2b2lkewoJCSR0aGlzOjphc3NlcnRJbnN0YW5jZU9mKFFST3V0cHV0SW50ZXJmYWNlOjpjbGFzcywgJHRoaXMtPm91dHB1dEludGVyZmFjZSk7Cgl9CgoJLyoqCgkgKiBUZXN0cyBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIGEgY2FjaGUgZmlsZSB0byBhbiBpbnZhbGlkIGRlc3RpbmF0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0U2F2ZUV4Y2VwdGlvbigpOnZvaWR7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbihRUkNvZGVPdXRwdXRFeGNlcHRpb246OmNsYXNzKTsKCQkkdGhpcy0+ZXhwZWN0RXhjZXB0aW9uTWVzc2FnZSgnQ291bGQgbm90IHdyaXRlIGRhdGEgdG8gY2FjaGUgZmlsZTogL2Zvby9iYXIudGVzdCcpOwoKCQkkdGhpcy0+b3B0aW9ucy0+Y2FjaGVmaWxlID0gJy9mb28vYmFyLnRlc3QnOwoJCSR0aGlzLT5vdXRwdXRJbnRlcmZhY2UgPSAkdGhpcy0+Z2V0T3V0cHV0SW50ZXJmYWNlKCR0aGlzLT5vcHRpb25zKTsKCQkkdGhpcy0+b3V0cHV0SW50ZXJmYWNlLT5kdW1wKCk7Cgl9CgoJLyoqCgkgKiBjb3ZlcnMgdGhlIG1vZHVsZSB2YWx1ZXMgc2V0dGluZ3MKCSAqLwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHRlc3RTZXRNb2R1bGVWYWx1ZXMoKTp2b2lkOwoKCS8qCgkgKiBhZGRpdGlvbmFsLCBub24tZXNzZW50aWFsLCBwb3RlbnRpYWxseSBpbmFjY3VyYXRlIGNvdmVyYWdlIHRlc3RzCgkgKi8KCgkvKioKCSAqIEBzZWUgdGVzdFN0cmluZ091dHB1dCgpCgkgKiBAcmV0dXJuIHN0cmluZ1tdW10KCSAqIEBpbnRlcm5hbAoJICovCglhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdHlwZXMoKTphcnJheTsKCgkvKioKCSAqIGNvdmVyYWdlIG9mIHRoZSBidWlsdC1pbiBvdXRwdXQgbW9kdWxlcwoJICoKCSAqIEBkYXRhUHJvdmlkZXIgdHlwZXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RTdHJpbmdPdXRwdXQoc3RyaW5nICR0eXBlKTp2b2lkewoJCSR0aGlzLT5vcHRpb25zLT5vdXRwdXRUeXBlICA9ICR0eXBlOwoJCSR0aGlzLT5vcHRpb25zLT5jYWNoZWZpbGUgICA9ICR0aGlzLT5idWlsZGRpci4nL3Rlc3QuJy4kdHlwZTsKCQkkdGhpcy0+b3B0aW9ucy0+aW1hZ2VCYXNlNjQgPSBmYWxzZTsKCgkJJHRoaXMtPm91dHB1dEludGVyZmFjZSAgICAgPSAkdGhpcy0+Z2V0T3V0cHV0SW50ZXJmYWNlKCR0aGlzLT5vcHRpb25zKTsKCQkkZGF0YSAgICAgICAgICAgICAgICAgICAgICA9ICR0aGlzLT5vdXRwdXRJbnRlcmZhY2UtPmR1bXAoKTsgLy8gY3JlYXRlcyB0aGUgY2FjaGUgZmlsZQoKCQkkdGhpczo6YXNzZXJ0U2FtZSgkZGF0YSwgZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPm9wdGlvbnMtPmNhY2hlZmlsZSkpOwoJfQoKCS8qKgoJICogY292ZXJzIHRoZSBidWlsdC1pbiBvdXRwdXQgbW9kdWxlcywgdGVzdHMgYWdhaW5zdCBwcmUtcmVuZGVyZWQgZGF0YQoJICoKCSAqIEBkYXRhUHJvdmlkZXIgdHlwZXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RSZW5kZXJJbWFnZShzdHJpbmcgJHR5cGUpOnZvaWR7CgoJCS8vIG1heSBmYWlsIG9uIENJLCBkaWZmZXJlbnQgUEhQIChwbGF0Zm9ybSkgdmVyc2lvbnMgcHJvZHVjZSBkaWZmZXJlbnQgb3V0cHV0CgkJLy8gdGhlIHNhbXBsZXMgd2VyZSBnZW5lcmF0ZWQgb24gcGhwLTcuNC4zLVdpbjMyLXZjMTUteDY0CgkJaWYoCgkJCShQSFBfT1NfRkFNSUxZICE9PSAnV2luZG93cycgfHwgUEhQX1ZFUlNJT05fSUQgPj0gODAxMDApCgkJCSYmIGluX2FycmF5KCR0eXBlLCBbUVJDb2RlOjpPVVRQVVRfSU1BR0VfSlBHLCBRUkNvZGU6Ok9VVFBVVF9JTUFHSUNLLCBRUkNvZGU6Ok9VVFBVVF9NQVJLVVBfU1ZHXSkKCQkpewoJCQkkdGhpczo6bWFya1Rlc3RTa2lwcGVkKCdtYXkgZmFpbCBvbiBDSScpOwoKCQkJLyoqIEBub2luc3BlY3Rpb24gUGhwVW5yZWFjaGFibGVTdGF0ZW1lbnRJbnNwZWN0aW9uICovCgkJCXJldHVybjsKCQl9CgoJCSR0aGlzLT5vcHRpb25zLT5vdXRwdXRUeXBlID0gJHR5cGU7CgoJCSR0aGlzOjphc3NlcnRTYW1lKAoJCQl0cmltKGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy9zYW1wbGVzLycuJHR5cGUpKSwKCQkJdHJpbSgobmV3IFFSQ29kZSgkdGhpcy0+b3B0aW9ucykpLT5yZW5kZXIoJ3Rlc3QnKSkKCQkpOwoJfQoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjI5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjY6Ik91dHB1dCI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdCI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJPdXRwdXRUZXN0QWJzdHJhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMDoiUVJPdXRwdXRUZXN0QWJzdHJhY3QiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjEwNjoiVGVzdCBhYnN0cmFjdCBmb3IgdGhlIHNldmVyYWwgKGJ1aWx0LWluKSBvdXRwdXQgbW9kdWxlcywKc2hvdWxkIGFsc28gYmUgdXNlZCB0byB0ZXN0IGN1c3RvbSBvdXRwdXQgbW9kdWxlcyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyODoiY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dCI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6Nzp7czo2OiJRUkNvZGUiO3M6MjQ6ImNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZSI7czo5OiJRUk9wdGlvbnMiO3M6Mjc6ImNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7czo0OiJCeXRlIjtzOjI3OiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXEJ5dGUiO3M6ODoiUVJNYXRyaXgiO3M6MzE6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MjE6IlFSQ29kZU91dHB1dEV4Y2VwdGlvbiI7czo0NjoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSQ29kZU91dHB1dEV4Y2VwdGlvbiI7czoxNzoiUVJPdXRwdXRJbnRlcmZhY2UiO3M6NDI6ImNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEludGVyZmFjZSI7czo4OiJUZXN0Q2FzZSI7czoyNjoiUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2UiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjE7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJUZXN0Q2FzZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YTo0OntzOjYxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6JGJ1aWxkZGlyIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjYxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6JGJ1aWxkZGlyIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiYnVpbGRkaXIiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjM3OiJfX0RJUl9fIC4gJy8uLi8uLi8uYnVpbGQvb3V0cHV0X3Rlc3QnIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e319czo2ODoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJPdXRwdXRUZXN0QWJzdHJhY3Q6OiRvdXRwdXRJbnRlcmZhY2UiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Njg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFST3V0cHV0VGVzdEFic3RyYWN0Ojokb3V0cHV0SW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6Im91dHB1dEludGVyZmFjZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJRUk91dHB1dEludGVyZmFjZSI7fX19czo2MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJPdXRwdXRUZXN0QWJzdHJhY3Q6OiRvcHRpb25zIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjYwOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6JG9wdGlvbnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJvcHRpb25zIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiUVJPcHRpb25zIjt9fX1zOjU5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6JG1hdHJpeCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJPdXRwdXRUZXN0QWJzdHJhY3Q6OiRtYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJtYXRyaXgiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtOO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzI6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiUVJNYXRyaXgiO319fX1zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0aG9kcyI7YTo4OntzOjU5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6c2V0VXAoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6ODM6IkF0dGVtcHRzIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB1bmRlciAvLmJ1aWxkIGFuZCBpbnN0YW5jZXMgc2V2ZXJhbCByZXF1aXJlZCBvYmplY3RzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6c2V0VXAoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6InNldFVwIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo3MjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJPdXRwdXRUZXN0QWJzdHJhY3Q6OmdldE91dHB1dEludGVyZmFjZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo4MzoiUmV0dXJucyBhIFFST3V0cHV0SW50ZXJmYWNlIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMgYW5kIHVzaW5nICR0aGlzLT5tYXRyaXgiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NzI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFST3V0cHV0VGVzdEFic3RyYWN0OjpnZXRPdXRwdXRJbnRlcmZhY2UoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE4OiJnZXRPdXRwdXRJbnRlcmZhY2UiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MTtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6Nzoib3B0aW9ucyI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiUVJPcHRpb25zIjt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjYwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoiUVJPdXRwdXRJbnRlcmZhY2UiO319fXM6NjY6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFST3V0cHV0VGVzdEFic3RyYWN0Ojp0ZXN0SW5zdGFuY2UoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mzg6IlZhbGlkYXRlIHRoZSBpbnN0YW5jZSBvZiB0aGUgaW50ZXJmYWNlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjY6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFST3V0cHV0VGVzdEFic3RyYWN0Ojp0ZXN0SW5zdGFuY2UoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJ0ZXN0SW5zdGFuY2UiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NjU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjcxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6dGVzdFNhdmVFeGNlcHRpb24oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6OTE6IlRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0cnlpbmcgdG8gd3JpdGUgYSBjYWNoZSBmaWxlIHRvIGFuIGludmFsaWQgZGVzdGluYXRpb24iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo3MToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJPdXRwdXRUZXN0QWJzdHJhY3Q6OnRlc3RTYXZlRXhjZXB0aW9uKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoidGVzdFNhdmVFeGNlcHRpb24iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjczOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6dGVzdFNldE1vZHVsZVZhbHVlcygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozMzoiY292ZXJzIHRoZSBtb2R1bGUgdmFsdWVzIHNldHRpbmdzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6ODE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NzM6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFST3V0cHV0VGVzdEFic3RyYWN0Ojp0ZXN0U2V0TW9kdWxlVmFsdWVzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxOToidGVzdFNldE1vZHVsZVZhbHVlcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjoxO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo4NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NTk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFST3V0cHV0VGVzdEFic3RyYWN0Ojp0eXBlcygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mzp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbiI6MTp7czo2MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbgBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFx0ZXN0U3RyaW5nT3V0cHV0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoidGVzdFN0cmluZ091dHB1dCI7fX1zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcT3V0cHV0XFFST3V0cHV0VGVzdEFic3RyYWN0Ojp0eXBlcygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NToidHlwZXMiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MTtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX1zOjcwOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6dGVzdFN0cmluZ091dHB1dCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozOToiY292ZXJhZ2Ugb2YgdGhlIGJ1aWx0LWluIG91dHB1dCBtb2R1bGVzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6ImRhdGFQcm92aWRlciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NToidHlwZXMiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjk3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjcwOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6dGVzdFN0cmluZ091dHB1dCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTY6InRlc3RTdHJpbmdPdXRwdXQiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoidHlwZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjY5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XE91dHB1dFxRUk91dHB1dFRlc3RBYnN0cmFjdDo6dGVzdFJlbmRlckltYWdlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjY3OiJjb3ZlcnMgdGhlIGJ1aWx0LWluIG91dHB1dCBtb2R1bGVzLCB0ZXN0cyBhZ2FpbnN0IHByZS1yZW5kZXJlZCBkYXRhIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6ImRhdGFQcm92aWRlciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NToidHlwZXMiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2OToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxPdXRwdXRcUVJPdXRwdXRUZXN0QWJzdHJhY3Q6OnRlc3RSZW5kZXJJbWFnZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6InRlc3RSZW5kZXJJbWFnZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJ0eXBlIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/P/+/yPMoahf38cwzB5+P-b8w b/files/P/+/yPMoahf38cwzB5+P-b8w
deleted file mode 100644
index b21718dbf..000000000
--- a/files/P/+/yPMoahf38cwzB5+P-b8w
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A42d091db9bd6f5eff8687eb5f9cf707d-99a986b7695b8a1caf1e00269292482d
-s:60632:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTk6IkNsYXNzIFFST3B0aW9uc1Rlc3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Nzp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTc6IlFST3B0aW9uc1Rlc3QucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMDguMTEuMjAxOCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjE6ImNoaWxsZXJsYW5cUVJDb2RlVGVzdCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJzbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxOCBzbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6Im5vaW5zcGVjdGlvbiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzI6IlBocFVudXNlZExvY2FsVmFyaWFibGVJbnNwZWN0aW9uIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiI5OWE5ODZiNzY5NWI4YTFjYWYxZTAwMjY5MjkyNDgyZCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjE3OiJRUk9wdGlvbnNUZXN0LnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjIzOiJ0ZXN0cy9RUk9wdGlvbnNUZXN0LnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6MzU5ODoiPD9waHAKLyoqCiAqIENsYXNzIFFST3B0aW9uc1Rlc3QKICoKICogQGZpbGVzb3VyY2UgICBRUk9wdGlvbnNUZXN0LnBocAogKiBAY3JlYXRlZCAgICAgIDA4LjExLjIwMTgKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZVRlc3QKICogQGF1dGhvciAgICAgICBzbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE4IHNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKgogKiBAbm9pbnNwZWN0aW9uIFBocFVudXNlZExvY2FsVmFyaWFibGVJbnNwZWN0aW9uCiAqLwoKbmFtZXNwYWNlIGNoaWxsZXJsYW5cUVJDb2RlVGVzdDsKCnVzZSBjaGlsbGVybGFuXFFSQ29kZVx7UVJDb2RlLCBRUkNvZGVFeGNlcHRpb24sIFFST3B0aW9uc307CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBRUk9wdGlvbnMgdGVzdAogKi8KY2xhc3MgUVJPcHRpb25zVGVzdCBleHRlbmRzIFRlc3RDYXNlewoKCS8qKgoJICogQHNlZSB0ZXN0VmVyc2lvbkNsYW1wKCkKCSAqIEByZXR1cm4gaW50W11bXQoJICogQGludGVybmFsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBWZXJzaW9uUHJvdmlkZXIoKTphcnJheXsKCQlyZXR1cm4gWwoJCQkndmFsdWVzID4gNDAgc2hvdWxkIGJlIGNsYW1wZWQgdG8gNDAnICAgICAgICA9PiBbNDIsIDQwXSwKCQkJJ3ZhbHVlcyA8IDEgc2hvdWxkIGJlIGNsYW1wZWQgdG8gMScgICAgICAgICAgPT4gWy00MiwgMV0sCgkJCSd2YWx1ZXMgaW4gYmV0d2VlbiBzaG9sZCBub3QgYmUgdG91Y2hlZCcgICAgID0+IFsyMSwgMjFdLAoJCQkndmFsdWUgLTEgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgaXMgKGRlZmF1bHQpJyA9PiBbUVJDb2RlOjpWRVJTSU9OX0FVVE8sIC0xXSwKCQldOwoJfQoKCS8qKgoJICogVGVzdHMgdGhlICR2ZXJzaW9uIGNsYW1waW5nCgkgKgoJICogQGRhdGFQcm92aWRlciBWZXJzaW9uUHJvdmlkZXIKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RWZXJzaW9uQ2xhbXAoaW50ICR2ZXJzaW9uLCBpbnQgJGV4cGVjdGVkKTp2b2lkewoJCSRvID0gbmV3IFFST3B0aW9ucyhbJ3ZlcnNpb24nID0+ICR2ZXJzaW9uXSk7CgoJCSR0aGlzOjphc3NlcnRTYW1lKCRleHBlY3RlZCwgJG8tPnZlcnNpb24pOwoJfQoKCS8qKgoJICogQHNlZSB0ZXN0VmVyc2lvbk1pbk1heENsYW1wKCkKCSAqIEByZXR1cm4gaW50W11bXQoJICogQGludGVybmFsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBWZXJzaW9uTWluTWF4UHJvdmlkZXIoKTphcnJheXsKCQlyZXR1cm4gWwoJCQknbm9ybWFsIGNsYW1wJyAgICAgICAgID0+IFs1LCAxMCwgNSwgMTBdLAoJCQknZXhjZWVkaW5nIHZhbHVlcycgICAgID0+IFstNDIsIDQyLCAxLCA0MF0sCgkJCSdtaW4gPiBtYXgnICAgICAgICAgICAgPT4gWzEwLCA1LCA1LCAxMF0sCgkJCSdtaW4gPiBtYXgsIGV4Y2VlZGluZycgPT4gWzQyLCAtNDIsIDEsIDQwXSwKCQldOwoJfQoKCS8qKgoJICogVGVzdHMgdGhlICR2ZXJzaW9uTWluLyR2ZXJzaW9uTWF4IGNsYW1waW5nCgkgKgoJICogQGRhdGFQcm92aWRlciBWZXJzaW9uTWluTWF4UHJvdmlkZXIKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RWZXJzaW9uTWluTWF4Q2xhbXAoaW50ICR2ZXJzaW9uTWluLCBpbnQgJHZlcnNpb25NYXgsIGludCAkZXhwZWN0ZWRNaW4sIGludCAkZXhwZWN0ZWRNYXgpOnZvaWR7CgkJJG8gPSBuZXcgUVJPcHRpb25zKFsndmVyc2lvbk1pbicgPT4gJHZlcnNpb25NaW4sICd2ZXJzaW9uTWF4JyA9PiAkdmVyc2lvbk1heF0pOwoKCQkkdGhpczo6YXNzZXJ0U2FtZSgkZXhwZWN0ZWRNaW4sICRvLT52ZXJzaW9uTWluKTsKCQkkdGhpczo6YXNzZXJ0U2FtZSgkZXhwZWN0ZWRNYXgsICRvLT52ZXJzaW9uTWF4KTsKCX0KCgkvKioKCSAqIEBzZWUgdGVzdE1hc2tQYXR0ZXJuQ2xhbXAoKQoJICogQHJldHVybiBpbnRbXVtdCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIE1hc2tQYXR0ZXJuUHJvdmlkZXIoKTphcnJheXsKCQlyZXR1cm4gWwoJCQknZXhjZWVkIG1heCcgICA9PiBbNDIsIDcsXSwKCQkJJ2V4Y2VlZCBtaW4nICAgPT4gWy00MiwgMF0sCgkJCSdkZWZhdWx0ICgtMSknID0+IFtRUkNvZGU6Ok1BU0tfUEFUVEVSTl9BVVRPLCAtMV0sCgkJXTsKCX0KCgkvKioKCSAqIFRlc3RzIHRoZSAkbWFza1BhdHRlcm4gY2xhbXBpbmcKCSAqCgkgKiBAZGF0YVByb3ZpZGVyIE1hc2tQYXR0ZXJuUHJvdmlkZXIKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RNYXNrUGF0dGVybkNsYW1wKGludCAkbWFza1BhdHRlcm4sIGludCAkZXhwZWN0ZWQpOnZvaWR7CgkJJG8gPSBuZXcgUVJPcHRpb25zKFsnbWFza1BhdHRlcm4nID0+ICRtYXNrUGF0dGVybl0pOwoKCQkkdGhpczo6YXNzZXJ0U2FtZSgkZXhwZWN0ZWQsICRvLT5tYXNrUGF0dGVybik7Cgl9CgoJLyoqCgkgKiBUZXN0cyBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIG9uIGFuIGluY29ycmVjdCBFQ0MgbGV2ZWwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RJbnZhbGlkRWNjTGV2ZWxFeGNlcHRpb24oKTp2b2lkewoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb24oUVJDb2RlRXhjZXB0aW9uOjpjbGFzcyk7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbk1lc3NhZ2UoJ0ludmFsaWQgZXJyb3IgY29ycmVjdCBsZXZlbDogNDInKTsKCgkJJG8gPSBuZXcgUVJPcHRpb25zKFsnZWNjTGV2ZWwnID0+IDQyXSk7Cgl9CgoJLyoqCgkgKiBAc2VlIHRlc3RDbGFtcFJHQlZhbHVlcygpCgkgKiBAcmV0dXJuIGludFtdW11bXQoJICogQGludGVybmFsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBSR0JQcm92aWRlcigpOmFycmF5ewoJCXJldHVybiBbCgkJCSdleGNlZWRpbmcgdmFsdWVzJyA9PiBbWy0xLCAwLCA5OTldLCBbMCwgMCAsMjU1XV0sCgkJCSd0b28gZmV3IHZhbHVlcycgICA9PiBbWzEsIDJdLCBbMjU1LCAyNTUsIDI1NV1dLAoJCQkndG9vIG1hbnkgdmFsdWVzJyAgPT4gW1sxLCAyLCAzLCA0LCA1XSwgWzEsIDIsIDNdXSwKCQldOwoJfQoKCS8qKgoJICogVGVzdHMgY2xhbXBpbmcgb2YgdGhlIFJHQiB2YWx1ZXMgZm9yICRpbWFnZVRyYW5zcGFyZW5jeUJHCgkgKgoJICogQGRhdGFQcm92aWRlciBSR0JQcm92aWRlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdENsYW1wUkdCVmFsdWVzKGFycmF5ICRyZ2IsIGFycmF5ICRleHBlY3RlZCk6dm9pZHsKCQkkbyA9IG5ldyBRUk9wdGlvbnMoWydpbWFnZVRyYW5zcGFyZW5jeUJHJyA9PiAkcmdiXSk7CgoJCSR0aGlzOjphc3NlcnRTYW1lKCRleHBlY3RlZCwgJG8tPmltYWdlVHJhbnNwYXJlbmN5QkcpOwoJfQoKCS8qKgoJICogVGVzdHMgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIGEgbm9uLW51bWVyaWMgUkdCIHZhbHVlIHdhcyBlbmNvdXRlcmVkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0SW52YWxpZFJHQlZhbHVlRXhjZXB0aW9uKCk6dm9pZHsKCQkkdGhpcy0+ZXhwZWN0RXhjZXB0aW9uKFFSQ29kZUV4Y2VwdGlvbjo6Y2xhc3MpOwoJCSR0aGlzLT5leHBlY3RFeGNlcHRpb25NZXNzYWdlKCdJbnZhbGlkIFJHQiB2YWx1ZS4nKTsKCgkJJG8gPSBuZXcgUVJPcHRpb25zKFsnaW1hZ2VUcmFuc3BhcmVuY3lCRycgPT4gWydyJywgJ2cnLCAnYiddXSk7Cgl9Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6MjI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3QiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyMjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJRUkNvZGVUZXN0Ijt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6MzY6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJPcHRpb25zVGVzdCI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUk9wdGlvbnNUZXN0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6IlFST3B0aW9uc1Rlc3QiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjE0OiJRUk9wdGlvbnMgdGVzdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyMToiY2hpbGxlcmxhblxRUkNvZGVUZXN0IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTo0OntzOjY6IlFSQ29kZSI7czoyNDoiY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlIjtzOjE1OiJRUkNvZGVFeGNlcHRpb24iO3M6MzM6ImNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZUV4Y2VwdGlvbiI7czo5OiJRUk9wdGlvbnMiO3M6Mjc6ImNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7czo4OiJUZXN0Q2FzZSI7czoyNjoiUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2UiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJUZXN0Q2FzZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6MTA6e3M6NTU6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJPcHRpb25zVGVzdDo6VmVyc2lvblByb3ZpZGVyKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTozOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcdGVzdFZlcnNpb25DbGFtcCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTY6InRlc3RWZXJzaW9uQ2xhbXAiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU1OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFST3B0aW9uc1Rlc3Q6OlZlcnNpb25Qcm92aWRlcigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6IlZlcnNpb25Qcm92aWRlciI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fXM6NTY6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJPcHRpb25zVGVzdDo6dGVzdFZlcnNpb25DbGFtcCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoyNzoiVGVzdHMgdGhlICR2ZXJzaW9uIGNsYW1waW5nIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6ImRhdGFQcm92aWRlciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTU6IlZlcnNpb25Qcm92aWRlciI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mzk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTY6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJPcHRpb25zVGVzdDo6dGVzdFZlcnNpb25DbGFtcCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTY6InRlc3RWZXJzaW9uQ2xhbXAiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NzoidmVyc2lvbiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo4OiJleHBlY3RlZCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NjE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJPcHRpb25zVGVzdDo6VmVyc2lvbk1pbk1heFByb3ZpZGVyKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTozOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcdGVzdFZlcnNpb25NaW5NYXhDbGFtcCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjI6InRlc3RWZXJzaW9uTWluTWF4Q2xhbXAiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjUwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjYxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFST3B0aW9uc1Rlc3Q6OlZlcnNpb25NaW5NYXhQcm92aWRlcigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjE6IlZlcnNpb25NaW5NYXhQcm92aWRlciI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fXM6NjI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJPcHRpb25zVGVzdDo6dGVzdFZlcnNpb25NaW5NYXhDbGFtcCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0MjoiVGVzdHMgdGhlICR2ZXJzaW9uTWluLyR2ZXJzaW9uTWF4IGNsYW1waW5nIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6ImRhdGFQcm92aWRlciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjE6IlZlcnNpb25NaW5NYXhQcm92aWRlciI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NjQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjI6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJPcHRpb25zVGVzdDo6dGVzdFZlcnNpb25NaW5NYXhDbGFtcCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjI6InRlc3RWZXJzaW9uTWluTWF4Q2xhbXAiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6NDp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MTA6InZlcnNpb25NaW4iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MTA6InZlcnNpb25NYXgiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToyO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MTE6ImV4cGVjdGVkTWluIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MztPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjExOiJleHBlY3RlZE1heCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NTk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJPcHRpb25zVGVzdDo6TWFza1BhdHRlcm5Qcm92aWRlcigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mzp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbiI6MTp7czo2MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbgBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XHRlc3RNYXNrUGF0dGVybkNsYW1wKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMDoidGVzdE1hc2tQYXR0ZXJuQ2xhbXAiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjc2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU5OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFST3B0aW9uc1Rlc3Q6Ok1hc2tQYXR0ZXJuUHJvdmlkZXIoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE5OiJNYXNrUGF0dGVyblByb3ZpZGVyIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjgxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19czo2MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUk9wdGlvbnNUZXN0Ojp0ZXN0TWFza1BhdHRlcm5DbGFtcCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozMToiVGVzdHMgdGhlICRtYXNrUGF0dGVybiBjbGFtcGluZyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEyOiJkYXRhUHJvdmlkZXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE5OiJNYXNrUGF0dGVyblByb3ZpZGVyIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3MztzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo4OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUk9wdGlvbnNUZXN0Ojp0ZXN0TWFza1BhdHRlcm5DbGFtcCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjA6InRlc3RNYXNrUGF0dGVybkNsYW1wIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjExOiJtYXNrUGF0dGVybiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo4OiJleHBlY3RlZCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6Njg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJPcHRpb25zVGVzdDo6dGVzdEludmFsaWRFY2NMZXZlbEV4Y2VwdGlvbigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1NzoiVGVzdHMgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBvbiBhbiBpbmNvcnJlY3QgRUNDIGxldmVsIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTAwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFST3B0aW9uc1Rlc3Q6OnRlc3RJbnZhbGlkRWNjTGV2ZWxFeGNlcHRpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI4OiJ0ZXN0SW52YWxpZEVjY0xldmVsRXhjZXB0aW9uIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEwMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcUVJPcHRpb25zVGVzdDo6UkdCUHJvdmlkZXIoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjM6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjU0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4iOjE6e3M6NjE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFx0ZXN0Q2xhbXBSR0JWYWx1ZXMoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE4OiJ0ZXN0Q2xhbXBSR0JWYWx1ZXMiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTEwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUxOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFST3B0aW9uc1Rlc3Q6OlJHQlByb3ZpZGVyKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToiUkdCUHJvdmlkZXIiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTE1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19czo1ODoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUk9wdGlvbnNUZXN0Ojp0ZXN0Q2xhbXBSR0JWYWx1ZXMoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTc6IlRlc3RzIGNsYW1waW5nIG9mIHRoZSBSR0IgdmFsdWVzIGZvciAkaW1hZ2VUcmFuc3BhcmVuY3lCRyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEyOiJkYXRhUHJvdmlkZXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiJSR0JQcm92aWRlciI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTIzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFST3B0aW9uc1Rlc3Q6OnRlc3RDbGFtcFJHQlZhbHVlcygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTg6InRlc3RDbGFtcFJHQlZhbHVlcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czozOiJyZ2IiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjg6ImV4cGVjdGVkIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMjg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjY4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XFFST3B0aW9uc1Rlc3Q6OnRlc3RJbnZhbGlkUkdCVmFsdWVFeGNlcHRpb24oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NzU6IlRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhIG5vbi1udW1lcmljIFJHQiB2YWx1ZSB3YXMgZW5jb3V0ZXJlZCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjczO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEzNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2ODoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxRUk9wdGlvbnNUZXN0Ojp0ZXN0SW52YWxpZFJHQlZhbHVlRXhjZXB0aW9uKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyODoidGVzdEludmFsaWRSR0JWYWx1ZUV4Y2VwdGlvbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMzc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/S/Q/Qqwu8PXc3EWvFRvYXlOQ b/files/S/Q/Qqwu8PXc3EWvFRvYXlOQ
deleted file mode 100644
index 2a36afaa1..000000000
--- a/files/S/Q/Qqwu8PXc3EWvFRvYXlOQ
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Af3f46f468250a7a8e739390164fb97fe-3b575c260eed1bb4c63f674b8b1d6574
-s:15424:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjc6IkNsYXNzIE1hc2tQYXR0ZXJuVGVzdGVyVGVzdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyNToiTWFza1BhdHRlcm5UZXN0ZXJUZXN0LnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjI0LjExLjIwMTciO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI2OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNyBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiM2I1NzVjMjYwZWVkMWJiNGM2M2Y2NzRiOGIxZDY1NzQiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoyNToiTWFza1BhdHRlcm5UZXN0ZXJUZXN0LnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjM2OiJ0ZXN0cy9EYXRhL01hc2tQYXR0ZXJuVGVzdGVyVGVzdC5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjEwNDc6Ijw/cGhwCi8qKgogKiBDbGFzcyBNYXNrUGF0dGVyblRlc3RlclRlc3QKICoKICogQGZpbGVzb3VyY2UgICBNYXNrUGF0dGVyblRlc3RlclRlc3QucGhwCiAqIEBjcmVhdGVkICAgICAgMjQuMTEuMjAxNwogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhCiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGE7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zOwp1c2UgY2hpbGxlcmxhblxRUkNvZGVcRGF0YVx7Qnl0ZSwgTWFza1BhdHRlcm5UZXN0ZXJ9Owp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogTWFza1BhdHRlcm5UZXN0ZXIgY292ZXJhZ2UgdGVzdAogKi8KZmluYWwgY2xhc3MgTWFza1BhdHRlcm5UZXN0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2V7CgoJLyoqCgkgKiBUZXN0cyBnZXR0aW5nIHRoZSBiZXN0IG1hc2sgcGF0dGVybgoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdE1hc2twYXR0ZXJuKCk6dm9pZHsKCQkkZGF0YUludGVyZmFjZSA9IG5ldyBCeXRlKG5ldyBRUk9wdGlvbnMoWyd2ZXJzaW9uJyA9PiAxMF0pLCAndGVzdCcpOwoKCQkkdGhpczo6YXNzZXJ0U2FtZSgzLCAobmV3IE1hc2tQYXR0ZXJuVGVzdGVyKCRkYXRhSW50ZXJmYWNlKSktPmdldEJlc3RNYXNrUGF0dGVybigpKTsKCX0KCgkvKioKCSAqIFRlc3RzIGdldHRpbmcgdGhlIHBlbmFsdHkgdmFsdWUgZm9yIGEgZ2l2ZW4gbWFzayBwYXR0ZXJuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0TWFza3BhdHRlcm5JRCgpOnZvaWR7CgkJJGRhdGFJbnRlcmZhY2UgPSBuZXcgQnl0ZShuZXcgUVJPcHRpb25zKFsndmVyc2lvbicgPT4gMTBdKSwgJ3Rlc3QnKTsKCgkJJHRoaXM6OmFzc2VydFNhbWUoNDI0MywgKG5ldyBNYXNrUGF0dGVyblRlc3RlcigkZGF0YUludGVyZmFjZSkpLT50ZXN0UGF0dGVybigzKSk7Cgl9Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6Mjc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGEiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJEYXRhIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxNYXNrUGF0dGVyblRlc3RlclRlc3QiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxNYXNrUGF0dGVyblRlc3RlclRlc3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMToiTWFza1BhdHRlcm5UZXN0ZXJUZXN0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozMToiTWFza1BhdHRlcm5UZXN0ZXIgY292ZXJhZ2UgdGVzdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyNjoiY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGEiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjQ6e3M6OToiUVJPcHRpb25zIjtzOjI3OiJjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO3M6NDoiQnl0ZSI7czoyNzoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxCeXRlIjtzOjE3OiJNYXNrUGF0dGVyblRlc3RlciI7czo0MDoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxNYXNrUGF0dGVyblRlc3RlciI7czo4OiJUZXN0Q2FzZSI7czoyNjoiUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2UiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjE7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJUZXN0Q2FzZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6Mjp7czo2ODoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXE1hc2tQYXR0ZXJuVGVzdGVyVGVzdDo6dGVzdE1hc2twYXR0ZXJuKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjM1OiJUZXN0cyBnZXR0aW5nIHRoZSBiZXN0IG1hc2sgcGF0dGVybiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcTWFza1BhdHRlcm5UZXN0ZXJUZXN0Ojp0ZXN0TWFza3BhdHRlcm4oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJ0ZXN0TWFza3BhdHRlcm4iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjcwOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcTWFza1BhdHRlcm5UZXN0ZXJUZXN0Ojp0ZXN0TWFza3BhdHRlcm5JRCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1NjoiVGVzdHMgZ2V0dGluZyB0aGUgcGVuYWx0eSB2YWx1ZSBmb3IgYSBnaXZlbiBtYXNrIHBhdHRlcm4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo3MDoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXE1hc2tQYXR0ZXJuVGVzdGVyVGVzdDo6dGVzdE1hc2twYXR0ZXJuSUQoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJ0ZXN0TWFza3BhdHRlcm5JRCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/T/B/oP0gvbegD38IINjCLkhA b/files/T/B/oP0gvbegD38IINjCLkhA
deleted file mode 100644
index 45a563902..000000000
--- a/files/T/B/oP0gvbegD38IINjCLkhA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A46061bb33edfde59b98188cceddc9b13-71f47014d4e8f9ac337f23786b6e3b10
-s:24032:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTY6IkNsYXNzIE51bWJlclRlc3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTQ6Ik51bWJlclRlc3QucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMjQuMTEuMjAxNyI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjY6ImNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjY6IlNtaWxleSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoyMToic21pbGV5QGNoaWxsZXJsYW4ubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiIyMDE3IFNtaWxleSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzoiTUlUIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiI3MWY0NzAxNGQ0ZThmOWFjMzM3ZjIzNzg2YjZlM2IxMCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjE0OiJOdW1iZXJUZXN0LnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjI1OiJ0ZXN0cy9EYXRhL051bWJlclRlc3QucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czoxNTI4OiI8P3BocAovKioKICogQ2xhc3MgTnVtYmVyVGVzdAogKgogKiBAZmlsZXNvdXJjZSAgIE51bWJlclRlc3QucGhwCiAqIEBjcmVhdGVkICAgICAgMjQuMTEuMjAxNwogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhCiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGE7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zOwp1c2UgY2hpbGxlcmxhblxRUkNvZGVcRGF0YVx7TnVtYmVyLCBRUkNvZGVEYXRhRXhjZXB0aW9uLCBRUkRhdGFJbnRlcmZhY2V9OwoKLyoqCiAqIFRlc3RzIHRoZSBOdW1iZXIgY2xhc3MKICovCmZpbmFsIGNsYXNzIE51bWJlclRlc3QgZXh0ZW5kcyBEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0ewoKCS8qKiBAaW50ZXJuYWwgKi8KCXByb3RlY3RlZCBzdHJpbmcgJHRlc3RkYXRhICA9ICcwMTIzNDU2Nzg5JzsKCgkvKiogQGludGVybmFsICovCglwcm90ZWN0ZWQgYXJyYXkgJGV4cGVjdGVkID0gWwoJCTE2LCA0MCwgMTIsIDg2LCAxMDYsIDEwNSwgMCwgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwKCQkxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwKCQkxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwKCQkxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTIwMSwgMTQxLCAxMDIsIDExNiwgMjM4LCAxNjIsIDIzOSwgMjMwLAoJCTIyMiwgMzcsIDc5LCAxOTIsIDQyLCAxMDksIDE4OCwgNzIsCgkJODksIDYzLCAxNjgsIDE1MQoJXTsKCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERhdGFJbnRlcmZhY2VJbnN0YW5jZShRUk9wdGlvbnMgJG9wdGlvbnMpOlFSRGF0YUludGVyZmFjZXsKCQlyZXR1cm4gbmV3IE51bWJlcigkb3B0aW9ucyk7Cgl9CgoJLyoqCgkgKiBUZXN0cyBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gYW4gaW52YWxpZCBjaGFyYWN0ZXIgaXMgZW5jb3VudGVyZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRDaGFyQ29kZUV4Y2VwdGlvbigpOnZvaWR7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbihRUkNvZGVEYXRhRXhjZXB0aW9uOjpjbGFzcyk7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbk1lc3NhZ2UoJ2lsbGVnYWwgY2hhcjogIiMiIFszNV0nKTsKCgkJJHRoaXMtPmRhdGFJbnRlcmZhY2UtPnNldERhdGEoJyMnKTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyNzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjc6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6IkRhdGEiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czozODoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXE51bWJlclRlc3QiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxOdW1iZXJUZXN0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6Ik51bWJlclRlc3QiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjIyOiJUZXN0cyB0aGUgTnVtYmVyIGNsYXNzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjI2OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6NDp7czo5OiJRUk9wdGlvbnMiO3M6Mjc6ImNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7czo2OiJOdW1iZXIiO3M6Mjk6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTnVtYmVyIjtzOjE5OiJRUkNvZGVEYXRhRXhjZXB0aW9uIjtzOjQyOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSQ29kZURhdGFFeGNlcHRpb24iO3M6MTU6IlFSRGF0YUludGVyZmFjZSI7czozODoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2UiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjE7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUzOiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcRGF0YWludGVyZmFjZVRlc3RBYnN0cmFjdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI1OiJEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjI6e3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxOdW1iZXJUZXN0OjokdGVzdGRhdGEiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxOdW1iZXJUZXN0OjokdGVzdGRhdGEiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJ0ZXN0ZGF0YSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6MTI6IicwMTIzNDU2Nzg5JyI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9fXM6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxOdW1iZXJUZXN0OjokZXhwZWN0ZWQiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxOdW1iZXJUZXN0OjokZXhwZWN0ZWQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJleHBlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6NDUyOiJbMTYsIDQwLCAxMiwgODYsIDEwNiwgMTA1LCAwLCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDIwMSwgMTQxLCAxMDIsIDExNiwgMjM4LCAxNjIsIDIzOSwgMjMwLCAyMjIsIDM3LCA3OSwgMTkyLCA0MiwgMTA5LCAxODgsIDcyLCA4OSwgNjMsIDE2OCwgMTUxXSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6Mjp7czo2NjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXE51bWJlclRlc3Q6OmdldERhdGFJbnRlcmZhY2VJbnN0YW5jZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcTnVtYmVyVGVzdDo6Z2V0RGF0YUludGVyZmFjZUluc3RhbmNlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNDoiZ2V0RGF0YUludGVyZmFjZUluc3RhbmNlIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjc6Im9wdGlvbnMiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyODoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6IlFST3B0aW9ucyI7fX1zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToiUVJEYXRhSW50ZXJmYWNlIjt9fX1zOjY2OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcTnVtYmVyVGVzdDo6dGVzdEdldENoYXJDb2RlRXhjZXB0aW9uKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjcyOiJUZXN0cyBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gYW4gaW52YWxpZCBjaGFyYWN0ZXIgaXMgZW5jb3VudGVyZWQiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2NjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXE51bWJlclRlc3Q6OnRlc3RHZXRDaGFyQ29kZUV4Y2VwdGlvbigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjQ6InRlc3RHZXRDaGFyQ29kZUV4Y2VwdGlvbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/U/5/51Uq4RqYKZa6Q3I8BRgA b/files/U/5/51Uq4RqYKZa6Q3I8BRgA
deleted file mode 100644
index fea0ebe2a..000000000
--- a/files/U/5/51Uq4RqYKZa6Q3I8BRgA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Af4fbe9a5ba07da4c5dd136e0ca43f3de-97174e445a15851ee051607db188750a
-s:56248:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTM6IkNsYXNzIFFSSW1hZ2UiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Nzp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IlFSSW1hZ2UucGhwIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJjcmVhdGVkIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMDoiMDUuMTIuMjAxNSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoicGFja2FnZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjQ6ImNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNSBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6Im5vaW5zcGVjdGlvbiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzU6IlBocENvbXBvc2VyRXh0ZW5zaW9uU3R1YnNJbnNwZWN0aW9uIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiI5NzE3NGU0NDVhMTU4NTFlZTA1MTYwN2RiMTg4NzUwYSI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjExOiJRUkltYWdlLnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjIyOiJzcmMvT3V0cHV0L1FSSW1hZ2UucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czo0OTkwOiI8P3BocAovKioKICogQ2xhc3MgUVJJbWFnZQogKgogKiBAZmlsZXNvdXJjZSAgIFFSSW1hZ2UucGhwCiAqIEBjcmVhdGVkICAgICAgMDUuMTIuMjAxNQogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dAogKiBAYXV0aG9yICAgICAgIFNtaWxleSA8c21pbGV5QGNoaWxsZXJsYW4ubmV0PgogKiBAY29weXJpZ2h0ICAgIDIwMTUgU21pbGV5CiAqIEBsaWNlbnNlICAgICAgTUlUCiAqCiAqIEBub2luc3BlY3Rpb24gUGhwQ29tcG9zZXJFeHRlbnNpb25TdHVic0luc3BlY3Rpb24KICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0OwoKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg7CnVzZSBjaGlsbGVybGFuXFFSQ29kZVx7UVJDb2RlLCBRUkNvZGVFeGNlcHRpb259Owp1c2UgY2hpbGxlcmxhblxTZXR0aW5nc1xTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZTsKdXNlIEV4Y2VwdGlvbjsKCnVzZSBmdW5jdGlvbiBhcnJheV92YWx1ZXMsIGJhc2U2NF9lbmNvZGUsIGNhbGxfdXNlcl9mdW5jLCBjb3VudCwgZXh0ZW5zaW9uX2xvYWRlZCwgaW1hZ2Vjb2xvcmFsbG9jYXRlLCBpbWFnZWNvbG9ydHJhbnNwYXJlbnQsCglpbWFnZWNyZWF0ZXRydWVjb2xvciwgaW1hZ2VkZXN0cm95LCBpbWFnZWZpbGxlZHJlY3RhbmdsZSwgaW1hZ2VnaWYsIGltYWdlanBlZywgaW1hZ2VwbmcsIGluX2FycmF5LAoJaXNfYXJyYXksIG9iX2VuZF9jbGVhbiwgb2JfZ2V0X2NvbnRlbnRzLCBvYl9zdGFydCwgcmFuZ2UsIHNwcmludGY7CgovKioKICogQ29udmVydHMgdGhlIG1hdHJpeCBpbnRvIEdEIGltYWdlcywgcmF3IG9yIGJhc2U2NCBvdXRwdXQgKHJlcXVpcmVzIGV4dC1nZCkKICoKICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvYm9vay5pbWFnZS5waHAKICovCmNsYXNzIFFSSW1hZ2UgZXh0ZW5kcyBRUk91dHB1dEFic3RyYWN0ewoKCS8qKgoJICogR0QgaW1hZ2UgdHlwZXMgdGhhdCBzdXBwb3J0IHRyYW5zcGFyZW5jeQoJICoKCSAqIEB2YXIgc3RyaW5nW10KCSAqLwoJcHJvdGVjdGVkIGNvbnN0IFRSQU5TUEFSRU5DWV9UWVBFUyA9IFsKCQlRUkNvZGU6Ok9VVFBVVF9JTUFHRV9QTkcsCgkJUVJDb2RlOjpPVVRQVVRfSU1BR0VfR0lGLAoJXTsKCglwcm90ZWN0ZWQgc3RyaW5nICRkZWZhdWx0TW9kZSA9IFFSQ29kZTo6T1VUUFVUX0lNQUdFX1BORzsKCgkvKioKCSAqIFRoZSBHRCBpbWFnZSByZXNvdXJjZQoJICoKCSAqIEBzZWUgaW1hZ2VjcmVhdGV0cnVlY29sb3IoKQoJICogQHZhciByZXNvdXJjZXxcR2RJbWFnZQoJICoKCSAqIEBwaGFuLXN1cHByZXNzIFBoYW5VbmRlY2xhcmVkVHlwZVByb3BlcnR5CgkgKi8KCXByb3RlY3RlZCAkaW1hZ2U7CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICoKCSAqIEB0aHJvd3MgXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZUV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UgJG9wdGlvbnMsIFFSTWF0cml4ICRtYXRyaXgpewoKCQlpZighZXh0ZW5zaW9uX2xvYWRlZCgnZ2QnKSl7CgkJCXRocm93IG5ldyBRUkNvZGVFeGNlcHRpb24oJ2V4dC1nZCBub3QgbG9hZGVkJyk7IC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmUKCQl9CgoJCXBhcmVudDo6X19jb25zdHJ1Y3QoJG9wdGlvbnMsICRtYXRyaXgpOwoJfQoKCS8qKgoJICogQGluaGVyaXREb2MKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldE1vZHVsZVZhbHVlcygpOnZvaWR7CgoJCWZvcmVhY2goJHRoaXM6OkRFRkFVTFRfTU9EVUxFX1ZBTFVFUyBhcyAkTV9UWVBFID0+ICRkZWZhdWx0VmFsdWUpewoJCQkkdiA9ICR0aGlzLT5vcHRpb25zLT5tb2R1bGVWYWx1ZXNbJE1fVFlQRV0gPz8gbnVsbDsKCgkJCWlmKCFpc19hcnJheSgkdikgfHwgY291bnQoJHYpIDwgMyl7CgkJCQkkdGhpcy0+bW9kdWxlVmFsdWVzWyRNX1RZUEVdID0gJGRlZmF1bHRWYWx1ZQoJCQkJCT8gWzAsIDAsIDBdCgkJCQkJOiBbMjU1LCAyNTUsIDI1NV07CgkJCX0KCQkJZWxzZXsKCQkJCSR0aGlzLT5tb2R1bGVWYWx1ZXNbJE1fVFlQRV0gPSBhcnJheV92YWx1ZXMoJHYpOwoJCQl9CgoJCX0KCgl9CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICoKCSAqIEByZXR1cm4gc3RyaW5nfHJlc291cmNlfFxHZEltYWdlCgkgKgoJICogQHBoYW4tc3VwcHJlc3MgUGhhblVuZGVjbGFyZWRUeXBlUmV0dXJuVHlwZSwgUGhhblR5cGVNaXNtYXRjaFJldHVybgoJICovCglwdWJsaWMgZnVuY3Rpb24gZHVtcChzdHJpbmcgJGZpbGUgPSBudWxsKXsKCQkkZmlsZSA/Pz0gJHRoaXMtPm9wdGlvbnMtPmNhY2hlZmlsZTsKCgkJJHRoaXMtPmltYWdlID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJHRoaXMtPmxlbmd0aCwgJHRoaXMtPmxlbmd0aCk7CgoJCS8vIGF2b2lkOiBJbmRpcmVjdCBtb2RpZmljYXRpb24gb2Ygb3ZlcmxvYWRlZCBwcm9wZXJ0eSAkaW1hZ2VUcmFuc3BhcmVuY3lCRyBoYXMgbm8gZWZmZWN0CgkJLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzEwNDU1MjE3CgkJJHRiZyAgICAgICAgPSAkdGhpcy0+b3B0aW9ucy0+aW1hZ2VUcmFuc3BhcmVuY3lCRzsKCQkvKiogQHBoYW4tc3VwcHJlc3MtbmV4dC1saW5lIFBoYW5QYXJhbVRvb0Zld0ludGVybmFsVW5wYWNrICovCgkJJGJhY2tncm91bmQgPSBpbWFnZWNvbG9yYWxsb2NhdGUoJHRoaXMtPmltYWdlLCAuLi4kdGJnKTsKCgkJaWYoKGJvb2wpJHRoaXMtPm9wdGlvbnMtPmltYWdlVHJhbnNwYXJlbnQgJiYgaW5fYXJyYXkoJHRoaXMtPm9wdGlvbnMtPm91dHB1dFR5cGUsICR0aGlzOjpUUkFOU1BBUkVOQ1lfVFlQRVMsIHRydWUpKXsKCQkJaW1hZ2Vjb2xvcnRyYW5zcGFyZW50KCR0aGlzLT5pbWFnZSwgJGJhY2tncm91bmQpOwoJCX0KCgkJaW1hZ2VmaWxsZWRyZWN0YW5nbGUoJHRoaXMtPmltYWdlLCAwLCAwLCAkdGhpcy0+bGVuZ3RoLCAkdGhpcy0+bGVuZ3RoLCAkYmFja2dyb3VuZCk7CgoJCWZvcmVhY2goJHRoaXMtPm1hdHJpeC0+bWF0cml4KCkgYXMgJHkgPT4gJHJvdyl7CgkJCWZvcmVhY2goJHJvdyBhcyAkeCA9PiAkTV9UWVBFKXsKCQkJCSR0aGlzLT5zZXRQaXhlbCgkeCwgJHksICR0aGlzLT5tb2R1bGVWYWx1ZXNbJE1fVFlQRV0pOwoJCQl9CgkJfQoKCQlpZigkdGhpcy0+b3B0aW9ucy0+cmV0dXJuUmVzb3VyY2UpewoJCQlyZXR1cm4gJHRoaXMtPmltYWdlOwoJCX0KCgkJJGltYWdlRGF0YSA9ICR0aGlzLT5kdW1wSW1hZ2UoKTsKCgkJaWYoJGZpbGUgIT09IG51bGwpewoJCQkkdGhpcy0+c2F2ZVRvRmlsZSgkaW1hZ2VEYXRhLCAkZmlsZSk7CgkJfQoKCQlpZigkdGhpcy0+b3B0aW9ucy0+aW1hZ2VCYXNlNjQpewoJCQkkaW1hZ2VEYXRhID0gc3ByaW50ZignZGF0YTppbWFnZS8lcztiYXNlNjQsJXMnLCAkdGhpcy0+b3B0aW9ucy0+b3V0cHV0VHlwZSwgYmFzZTY0X2VuY29kZSgkaW1hZ2VEYXRhKSk7CgkJfQoKCQlyZXR1cm4gJGltYWdlRGF0YTsKCX0KCgkvKioKCSAqIENyZWF0ZXMgYSBzaW5nbGUgUVIgcGl4ZWwgd2l0aCB0aGUgZ2l2ZW4gc2V0dGluZ3MKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFBpeGVsKGludCAkeCwgaW50ICR5LCBhcnJheSAkcmdiKTp2b2lkewoJCWltYWdlZmlsbGVkcmVjdGFuZ2xlKAoJCQkkdGhpcy0+aW1hZ2UsCgkJCSR4ICogJHRoaXMtPnNjYWxlLAoJCQkkeSAqICR0aGlzLT5zY2FsZSwKCQkJKCR4ICsgMSkgKiAkdGhpcy0+c2NhbGUsCgkJCSgkeSArIDEpICogJHRoaXMtPnNjYWxlLAoJCQkvKiogQHBoYW4tc3VwcHJlc3MtbmV4dC1saW5lIFBoYW5QYXJhbVRvb0Zld0ludGVybmFsVW5wYWNrICovCgkJCWltYWdlY29sb3JhbGxvY2F0ZSgkdGhpcy0+aW1hZ2UsIC4uLiRyZ2IpCgkJKTsKCX0KCgkvKioKCSAqIENyZWF0ZXMgdGhlIGZpbmFsIGltYWdlIGJ5IGNhbGxpbmcgdGhlIGRlc2lyZWQgR0Qgb3V0cHV0IGZ1bmN0aW9uCgkgKgoJICogQHRocm93cyBcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSQ29kZU91dHB1dEV4Y2VwdGlvbgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZHVtcEltYWdlKCk6c3RyaW5newoJCW9iX3N0YXJ0KCk7CgoJCXRyeXsKCQkJY2FsbF91c2VyX2Z1bmMoWyR0aGlzLCAkdGhpcy0+b3V0cHV0TW9kZSA/PyAkdGhpcy0+ZGVmYXVsdE1vZGVdKTsKCQl9CgkJLy8gbm90IGdvaW5nIHRvIGNvdmVyIGVkZ2UgY2FzZXMKCQkvLyBAY29kZUNvdmVyYWdlSWdub3JlU3RhcnQKCQljYXRjaChFeGNlcHRpb24gJGUpewoJCQl0aHJvdyBuZXcgUVJDb2RlT3V0cHV0RXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCkpOwoJCX0KCQkvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCgoJCSRpbWFnZURhdGEgPSBvYl9nZXRfY29udGVudHMoKTsKCQlpbWFnZWRlc3Ryb3koJHRoaXMtPmltYWdlKTsKCgkJb2JfZW5kX2NsZWFuKCk7CgoJCXJldHVybiAkaW1hZ2VEYXRhOwoJfQoKCS8qKgoJICogUE5HIG91dHB1dAoJICoKCSAqIEByZXR1cm4gdm9pZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcG5nKCk6dm9pZHsKCQlpbWFnZXBuZygKCQkJJHRoaXMtPmltYWdlLAoJCQludWxsLAoJCQlpbl9hcnJheSgkdGhpcy0+b3B0aW9ucy0+cG5nQ29tcHJlc3Npb24sIHJhbmdlKC0xLCA5KSwgdHJ1ZSkKCQkJCT8gJHRoaXMtPm9wdGlvbnMtPnBuZ0NvbXByZXNzaW9uCgkJCQk6IC0xCgkJKTsKCX0KCgkvKioKCSAqIEppZmYgLSBsaWtlLi4uIEppdEh1YiEKCSAqCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdpZigpOnZvaWR7CgkJaW1hZ2VnaWYoJHRoaXMtPmltYWdlKTsKCX0KCgkvKioKCSAqIEpQRyBvdXRwdXQKCSAqCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGpwZygpOnZvaWR7CgkJaW1hZ2VqcGVnKAoJCQkkdGhpcy0+aW1hZ2UsCgkJCW51bGwsCgkJCWluX2FycmF5KCR0aGlzLT5vcHRpb25zLT5qcGVnUXVhbGl0eSwgcmFuZ2UoMCwgMTAwKSwgdHJ1ZSkKCQkJCT8gJHRoaXMtPm9wdGlvbnMtPmpwZWdRdWFsaXR5CgkJCQk6IDg1CgkJKTsKCX0KCn0KIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czoyNToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI1OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiT3V0cHV0Ijt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6MzM6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnZSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NzoiUVJJbWFnZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NzQ6IkNvbnZlcnRzIHRoZSBtYXRyaXggaW50byBHRCBpbWFnZXMsIHJhdyBvciBiYXNlNjQgb3V0cHV0IChyZXF1aXJlcyBleHQtZ2QpIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjUyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsIjoxOntzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybAB1cmkiO3M6MzY6Imh0dHA6Ly9waHAubmV0L21hbnVhbC9ib29rLmltYWdlLnBocCI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyNDoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTo1OntzOjg6IlFSTWF0cml4IjtzOjMxOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjY6IlFSQ29kZSI7czoyNDoiY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlIjtzOjE1OiJRUkNvZGVFeGNlcHRpb24iO3M6MzM6ImNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZUV4Y2VwdGlvbiI7czoyNjoiU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO3M6NDY6ImNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO3M6OToiRXhjZXB0aW9uIjtzOjk6IkV4Y2VwdGlvbiI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcGFyZW50IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRBYnN0cmFjdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE2OiJRUk91dHB1dEFic3RyYWN0Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MTp7czo1MzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjpUUkFOU1BBUkVOQ1lfVFlQRVMiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTM6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnZTo6VFJBTlNQQVJFTkNZX1RZUEVTIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTg6IlRSQU5TUEFSRU5DWV9UWVBFUyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0MDoiR0QgaW1hZ2UgdHlwZXMgdGhhdCBzdXBwb3J0IHRyYW5zcGFyZW5jeSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czo5MDoiW1xjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6Ok9VVFBVVF9JTUFHRV9QTkcsIFxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGU6Ok9VVFBVVF9JTUFHRV9HSUZdIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mzg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YToyOntzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2U6OiRkZWZhdWx0TW9kZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjokZGVmYXVsdE1vZGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToiZGVmYXVsdE1vZGUiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TjtzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6T1VUUFVUX0lNQUdFX1BORyI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9fXM6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnZTo6JGltYWdlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQxOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2U6OiRpbWFnZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6ImltYWdlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjIxOiJUaGUgR0QgaW1hZ2UgcmVzb3VyY2UiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mzp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbiI6MTp7czo2MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbgBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMDoiaW1hZ2VjcmVhdGV0cnVlY29sb3IiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7Tzo0MDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFJlc291cmNlXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6ODoiXEdkSW1hZ2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJHZEltYWdlIjt9fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEzOiJwaGFuLXN1cHByZXNzIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyNjoiUGhhblVuZGVjbGFyZWRUeXBlUHJvcGVydHkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtOO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtOO319czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6ODp7czo0ODoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjpfX2NvbnN0cnVjdCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xUaHJvd3MiOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM0OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlRXhjZXB0aW9uIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6IlFSQ29kZUV4Y2VwdGlvbiI7fX1zOjc6IgAqAG5hbWUiO3M6NjoidGhyb3dzIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2U6Ol9fY29uc3RydWN0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToiX19jb25zdHJ1Y3QiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6Nzoib3B0aW9ucyI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxTZXR0aW5nc1xTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI2OiJTZXR0aW5nc0NvbnRhaW5lckludGVyZmFjZSI7fX1zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo2OiJtYXRyaXgiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJRUk1hdHJpeCI7fX1zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fX1zOjUyOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2U6OnNldE1vZHVsZVZhbHVlcygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiaW5oZXJpdERvYyI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Njk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnZTo6c2V0TW9kdWxlVmFsdWVzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToic2V0TW9kdWxlVmFsdWVzIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjcyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo0MToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjpkdW1wKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTozOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjM6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjQwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcUmVzb3VyY2VfIjowOnt9aToyO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo4OiJcR2RJbWFnZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6IkdkSW1hZ2UiO319fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTM6InBoYW4tc3VwcHJlc3MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjUyOiJQaGFuVW5kZWNsYXJlZFR5cGVSZXR1cm5UeXBlLCBQaGFuVHlwZU1pc21hdGNoUmV0dXJuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjpkdW1wKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJkdW1wIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImZpbGUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7czo0OiJudWxsIjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e319czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjpzZXRQaXhlbCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0OToiQ3JlYXRlcyBhIHNpbmdsZSBRUiBwaXhlbCB3aXRoIHRoZSBnaXZlbiBzZXR0aW5ncyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEzNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjpzZXRQaXhlbCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoic2V0UGl4ZWwiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6Mzp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MToieCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czoxOiJ5IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjM6InJnYiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTQwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo0NjoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjpkdW1wSW1hZ2UoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NjU6IkNyZWF0ZXMgdGhlIGZpbmFsIGltYWdlIGJ5IGNhbGxpbmcgdGhlIGRlc2lyZWQgR0Qgb3V0cHV0IGZ1bmN0aW9uIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xUaHJvd3MiOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSQ29kZU91dHB1dEV4Y2VwdGlvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIxOiJRUkNvZGVPdXRwdXRFeGNlcHRpb24iO319czo3OiIAKgBuYW1lIjtzOjY6InRocm93cyI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNTI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDY6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnZTo6ZHVtcEltYWdlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJkdW1wSW1hZ2UiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTU3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX1zOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2U6OnBuZygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxMDoiUE5HIG91dHB1dCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e31zOjc6IgAqAG5hbWUiO3M6NjoicmV0dXJuIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE3ODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjpwbmcoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjM6InBuZyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxODM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2U6OmdpZigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoyMjoiSmlmZiAtIGxpa2UuLi4gSml0SHViISI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e31zOjc6IgAqAG5hbWUiO3M6NjoicmV0dXJuIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE5MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjpnaWYoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjM6ImdpZiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxOTg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjQwOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2U6OmpwZygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxMDoiSlBHIG91dHB1dCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e31zOjc6IgAqAG5hbWUiO3M6NjoicmV0dXJuIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIwMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MDoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdlOjpqcGcoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjM6ImpwZyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMDc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/U/9/pV6pi7GcuTA1YeP6WdGA b/files/U/9/pV6pi7GcuTA1YeP6WdGA
deleted file mode 100644
index c1e0f5e5d..000000000
--- a/files/U/9/pV6pi7GcuTA1YeP6WdGA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Ab35ca0c182d9df96f981d1ed731e6eff-d6c46773e5ba812445185ddd653b3f89
-s:7496:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjc6IkNsYXNzIFFSQ29kZU91dHB1dEV4Y2VwdGlvbiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyNToiUVJDb2RlT3V0cHV0RXhjZXB0aW9uLnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjA5LjEyLjIwMTUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6NjoiU21pbGV5IjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjIxOiJzbWlsZXlAY2hpbGxlcmxhbi5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IjIwMTUgU21pbGV5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo1O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozOiJNSVQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czowOiIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjA6e319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6ImQ2YzQ2NzczZTViYTgxMjQ0NTE4NWRkZDY1M2IzZjg5IjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWUiO3M6MjU6IlFSQ29kZU91dHB1dEV4Y2VwdGlvbi5waHAiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czozNjoic3JjL091dHB1dC9RUkNvZGVPdXRwdXRFeGNlcHRpb24ucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czozOTE6Ijw/cGhwCi8qKgogKiBDbGFzcyBRUkNvZGVPdXRwdXRFeGNlcHRpb24KICoKICogQGZpbGVzb3VyY2UgICBRUkNvZGVPdXRwdXRFeGNlcHRpb24ucGhwCiAqIEBjcmVhdGVkICAgICAgMDkuMTIuMjAxNQogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dAogKiBAYXV0aG9yICAgICAgIFNtaWxleSA8c21pbGV5QGNoaWxsZXJsYW4ubmV0PgogKiBAY29weXJpZ2h0ICAgIDIwMTUgU21pbGV5CiAqIEBsaWNlbnNlICAgICAgTUlUCiAqLwoKbmFtZXNwYWNlIGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dDsKCnVzZSBjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGVFeGNlcHRpb247CgpjbGFzcyBRUkNvZGVPdXRwdXRFeGNlcHRpb24gZXh0ZW5kcyBRUkNvZGVFeGNlcHRpb257fQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjI1OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjU6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJPdXRwdXQiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkNvZGVPdXRwdXRFeGNlcHRpb24iO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJDb2RlT3V0cHV0RXhjZXB0aW9uIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjE6IlFSQ29kZU91dHB1dEV4Y2VwdGlvbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcGFyZW50IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzQ6IlxjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGVFeGNlcHRpb24iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToiUVJDb2RlRXhjZXB0aW9uIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0aG9kcyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/U/K/RaQ-TSsjt1YT5hV9EDvg b/files/U/K/RaQ-TSsjt1YT5hV9EDvg
deleted file mode 100644
index 961671800..000000000
--- a/files/U/K/RaQ-TSsjt1YT5hV9EDvg
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A6efe3acfed58500c89222069397f57be-c90d0810bfa4c0ccf9adb96d493138c2
-s:29264:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTU6IkNsYXNzIFFSSW1hZ2ljayI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo3OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMzoiUVJJbWFnaWNrLnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjA0LjA3LjIwMTgiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI0OiJjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6Njoic21pbGV5IjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjIxOiJzbWlsZXlAY2hpbGxlcmxhbi5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IjIwMTggc21pbGV5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo1O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozOiJNSVQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjY7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEyOiJub2luc3BlY3Rpb24iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM1OiJQaHBDb21wb3NlckV4dGVuc2lvblN0dWJzSW5zcGVjdGlvbiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiYzkwZDA4MTBiZmE0YzBjY2Y5YWRiOTZkNDkzMTM4YzIiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxMzoiUVJJbWFnaWNrLnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjI0OiJzcmMvT3V0cHV0L1FSSW1hZ2ljay5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjI1NjA6Ijw/cGhwCi8qKgogKiBDbGFzcyBRUkltYWdpY2sKICoKICogQGZpbGVzb3VyY2UgICBRUkltYWdpY2sucGhwCiAqIEBjcmVhdGVkICAgICAgMDQuMDcuMjAxOAogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dAogKiBAYXV0aG9yICAgICAgIHNtaWxleSA8c21pbGV5QGNoaWxsZXJsYW4ubmV0PgogKiBAY29weXJpZ2h0ICAgIDIwMTggc21pbGV5CiAqIEBsaWNlbnNlICAgICAgTUlUCiAqCiAqIEBub2luc3BlY3Rpb24gUGhwQ29tcG9zZXJFeHRlbnNpb25TdHVic0luc3BlY3Rpb24KICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0OwoKdXNlIGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg7CnVzZSBjaGlsbGVybGFuXFFSQ29kZVxRUkNvZGVFeGNlcHRpb247CnVzZSBjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlOwp1c2UgSW1hZ2ljaywgSW1hZ2lja0RyYXcsIEltYWdpY2tQaXhlbDsKCnVzZSBmdW5jdGlvbiBleHRlbnNpb25fbG9hZGVkLCBpc19zdHJpbmc7CgovKioKICogSW1hZ2VNYWdpY2sgb3V0cHV0IG1vZHVsZSAocmVxdWlyZXMgZXh0LWltYWdpY2spCiAqCiAqIEBzZWUgaHR0cDovL3BocC5uZXQvbWFudWFsL2Jvb2suaW1hZ2ljay5waHAKICogQHNlZSBodHRwOi8vcGhwaW1hZ2ljay5jb20KICovCmNsYXNzIFFSSW1hZ2ljayBleHRlbmRzIFFST3V0cHV0QWJzdHJhY3R7CgoJcHJvdGVjdGVkIEltYWdpY2sgJGltYWdpY2s7CgoJLyoqCgkgKiBAaW5oZXJpdERvYwoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UgJG9wdGlvbnMsIFFSTWF0cml4ICRtYXRyaXgpewoKCQlpZighZXh0ZW5zaW9uX2xvYWRlZCgnaW1hZ2ljaycpKXsKCQkJdGhyb3cgbmV3IFFSQ29kZUV4Y2VwdGlvbignZXh0LWltYWdpY2sgbm90IGxvYWRlZCcpOyAvLyBAY29kZUNvdmVyYWdlSWdub3JlCgkJfQoKCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCRvcHRpb25zLCAkbWF0cml4KTsKCX0KCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRNb2R1bGVWYWx1ZXMoKTp2b2lkewoKCQlmb3JlYWNoKCR0aGlzOjpERUZBVUxUX01PRFVMRV9WQUxVRVMgYXMgJHR5cGUgPT4gJGRlZmF1bHRWYWx1ZSl7CgkJCSR2ID0gJHRoaXMtPm9wdGlvbnMtPm1vZHVsZVZhbHVlc1skdHlwZV0gPz8gbnVsbDsKCgkJCWlmKCFpc19zdHJpbmcoJHYpKXsKCQkJCSR0aGlzLT5tb2R1bGVWYWx1ZXNbJHR5cGVdID0gJGRlZmF1bHRWYWx1ZQoJCQkJCT8gbmV3IEltYWdpY2tQaXhlbCgkdGhpcy0+b3B0aW9ucy0+bWFya3VwRGFyaykKCQkJCQk6IG5ldyBJbWFnaWNrUGl4ZWwoJHRoaXMtPm9wdGlvbnMtPm1hcmt1cExpZ2h0KTsKCQkJfQoJCQllbHNlewoJCQkJJHRoaXMtPm1vZHVsZVZhbHVlc1skdHlwZV0gPSBuZXcgSW1hZ2lja1BpeGVsKCR2KTsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKgoJICogQHJldHVybiBzdHJpbmd8XEltYWdpY2sKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGR1bXAoc3RyaW5nICRmaWxlID0gbnVsbCl7CgkJJGZpbGUgPz89ICR0aGlzLT5vcHRpb25zLT5jYWNoZWZpbGU7CgkJJHRoaXMtPmltYWdpY2sgPSBuZXcgSW1hZ2ljazsKCgkJJHRoaXMtPmltYWdpY2stPm5ld0ltYWdlKAoJCQkkdGhpcy0+bGVuZ3RoLAoJCQkkdGhpcy0+bGVuZ3RoLAoJCQluZXcgSW1hZ2lja1BpeGVsKCR0aGlzLT5vcHRpb25zLT5pbWFnaWNrQkcgPz8gJ3RyYW5zcGFyZW50JyksCgkJCSR0aGlzLT5vcHRpb25zLT5pbWFnaWNrRm9ybWF0CgkJKTsKCgkJJHRoaXMtPmRyYXdJbWFnZSgpOwoKCQlpZigkdGhpcy0+b3B0aW9ucy0+cmV0dXJuUmVzb3VyY2UpewoJCQlyZXR1cm4gJHRoaXMtPmltYWdpY2s7CgkJfQoKCQkkaW1hZ2VEYXRhID0gJHRoaXMtPmltYWdpY2stPmdldEltYWdlQmxvYigpOwoKCQlpZigkZmlsZSAhPT0gbnVsbCl7CgkJCSR0aGlzLT5zYXZlVG9GaWxlKCRpbWFnZURhdGEsICRmaWxlKTsKCQl9CgoJCXJldHVybiAkaW1hZ2VEYXRhOwoJfQoKCS8qKgoJICogQ3JlYXRlcyB0aGUgUVIgaW1hZ2UgdmlhIEltYWdpY2tEcmF3CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBkcmF3SW1hZ2UoKTp2b2lkewoJCSRkcmF3ID0gbmV3IEltYWdpY2tEcmF3OwoKCQlmb3JlYWNoKCR0aGlzLT5tYXRyaXgtPm1hdHJpeCgpIGFzICR5ID0+ICRyb3cpewoJCQlmb3JlYWNoKCRyb3cgYXMgJHggPT4gJE1fVFlQRSl7CgkJCQkkZHJhdy0+c2V0U3Ryb2tlQ29sb3IoJHRoaXMtPm1vZHVsZVZhbHVlc1skTV9UWVBFXSk7CgkJCQkkZHJhdy0+c2V0RmlsbENvbG9yKCR0aGlzLT5tb2R1bGVWYWx1ZXNbJE1fVFlQRV0pOwoJCQkJJGRyYXctPnJlY3RhbmdsZSgKCQkJCQkkeCAqICR0aGlzLT5zY2FsZSwKCQkJCQkkeSAqICR0aGlzLT5zY2FsZSwKCQkJCQkoJHggKyAxKSAqICR0aGlzLT5zY2FsZSwKCQkJCQkoJHkgKyAxKSAqICR0aGlzLT5zY2FsZQoJCQkJKTsKCgkJCX0KCQl9CgoJCSR0aGlzLT5pbWFnaWNrLT5kcmF3SW1hZ2UoJGRyYXcpOwoJfQoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjI1OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjU6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJPdXRwdXQiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czozNToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdpY2siO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxMTp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzU6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnaWNrIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiUVJJbWFnaWNrIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0ODoiSW1hZ2VNYWdpY2sgb3V0cHV0IG1vZHVsZSAocmVxdWlyZXMgZXh0LWltYWdpY2spIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjI6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjUyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsIjoxOntzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybAB1cmkiO3M6Mzg6Imh0dHA6Ly9waHAubmV0L21hbnVhbC9ib29rLmltYWdpY2sucGhwIjt9czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjUyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsIjoxOntzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybAB1cmkiO3M6MjE6Imh0dHA6Ly9waHBpbWFnaWNrLmNvbSI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyNDoiY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTo2OntzOjg6IlFSTWF0cml4IjtzOjMxOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4IjtzOjE1OiJRUkNvZGVFeGNlcHRpb24iO3M6MzM6ImNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZUV4Y2VwdGlvbiI7czoyNjoiU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO3M6NDY6ImNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJJbnRlcmZhY2UiO3M6NzoiSW1hZ2ljayI7czo3OiJJbWFnaWNrIjtzOjExOiJJbWFnaWNrRHJhdyI7czoxMToiSW1hZ2lja0RyYXciO3M6MTI6IkltYWdpY2tQaXhlbCI7czoxMjoiSW1hZ2lja1BpeGVsIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEFic3RyYWN0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTY6IlFST3V0cHV0QWJzdHJhY3QiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6MTp7czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdpY2s6OiRpbWFnaWNrIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2ljazo6JGltYWdpY2siO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJpbWFnaWNrIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO047czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo4OiJcSW1hZ2ljayI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6IkltYWdpY2siO319fX1zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0aG9kcyI7YTo0OntzOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2ljazo6X19jb25zdHJ1Y3QoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXREb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjgzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2ljazo6X19jb25zdHJ1Y3QoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJfX2NvbnN0cnVjdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJvcHRpb25zIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjY6IlNldHRpbmdzQ29udGFpbmVySW50ZXJmYWNlIjt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjY6Im1hdHJpeCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6IlFSTWF0cml4Ijt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9fXM6NTQ6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnaWNrOjpzZXRNb2R1bGVWYWx1ZXMoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXREb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjgzO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU0OiJcY2hpbGxlcmxhblxRUkNvZGVcT3V0cHV0XFFSSW1hZ2ljazo6c2V0TW9kdWxlVmFsdWVzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToic2V0TW9kdWxlVmFsdWVzIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdpY2s6OmR1bXAoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjI6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImluaGVyaXREb2MiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo4OiJcSW1hZ2ljayI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6IkltYWdpY2siO319fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6ODM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NjU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnaWNrOjpkdW1wKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJkdW1wIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImZpbGUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7czo0OiJudWxsIjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e319czo0ODoiXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUkltYWdpY2s6OmRyYXdJbWFnZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozNjoiQ3JlYXRlcyB0aGUgUVIgaW1hZ2UgdmlhIEltYWdpY2tEcmF3IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6ODM7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJJbWFnaWNrOjpkcmF3SW1hZ2UoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6ImRyYXdJbWFnZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/W/H/LP0oGPe-wWWVJ9cgd-0A b/files/W/H/LP0oGPe-wWWVJ9cgd-0A
deleted file mode 100644
index 922c83bbe..000000000
--- a/files/W/H/LP0oGPe-wWWVJ9cgd-0A
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A3db9168bac2313bc61c4acfed1ce1036-23ece8e9f49503785f317a192a776613
-s:32628:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTU6IkNsYXNzIEJpdEJ1ZmZlciI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMzoiQml0QnVmZmVyLnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjI1LjExLjIwMTUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI1OiJjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjY6IlNtaWxleSI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoyMToic21pbGV5QGNoaWxsZXJsYW4ubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjExOiIyMDE1IFNtaWxleSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzoiTUlUIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiIyM2VjZThlOWY0OTUwMzc4NWYzMTdhMTkyYTc3NjYxMyI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjEzOiJCaXRCdWZmZXIucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6MjU6InNyYy9IZWxwZXJzL0JpdEJ1ZmZlci5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjE0MTE6Ijw/cGhwCi8qKgogKiBDbGFzcyBCaXRCdWZmZXIKICoKICogQGZpbGVzb3VyY2UgICBCaXRCdWZmZXIucGhwCiAqIEBjcmVhdGVkICAgICAgMjUuMTEuMjAxNQogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnMKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzOwoKdXNlIGZ1bmN0aW9uIGNvdW50LCBmbG9vcjsKCi8qKgogKiBIb2xkcyB0aGUgcmF3IGJpbmFyeSBkYXRhCiAqLwpmaW5hbCBjbGFzcyBCaXRCdWZmZXJ7CgoJLyoqCgkgKiBUaGUgYnVmZmVyIGNvbnRlbnQKCSAqCgkgKiBAdmFyIGludFtdCgkgKi8KCXByb3RlY3RlZCBhcnJheSAkYnVmZmVyID0gW107CgoJLyoqCgkgKiBMZW5ndGggb2YgdGhlIGNvbnRlbnQgKGJpdHMpCgkgKi8KCXByb3RlY3RlZCBpbnQgJGxlbmd0aCA9IDA7CgoJLyoqCgkgKiBjbGVhcnMgdGhlIGJ1ZmZlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKTpCaXRCdWZmZXJ7CgkJJHRoaXMtPmJ1ZmZlciA9IFtdOwoJCSR0aGlzLT5sZW5ndGggPSAwOwoKCQlyZXR1cm4gJHRoaXM7Cgl9CgoJLyoqCgkgKiBhcHBlbmRzIGEgc2VxdWVuY2Ugb2YgYml0cwoJICovCglwdWJsaWMgZnVuY3Rpb24gcHV0KGludCAkbnVtLCBpbnQgJGxlbmd0aCk6Qml0QnVmZmVyewoKCQlmb3IoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICRpKyspewoJCQkkdGhpcy0+cHV0Qml0KCgoJG51bSA+PiAoJGxlbmd0aCAtICRpIC0gMSkpICYgMSkgPT09IDEpOwoJCX0KCgkJcmV0dXJuICR0aGlzOwoJfQoKCS8qKgoJICogYXBwZW5kcyBhIHNpbmdsZSBiaXQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHB1dEJpdChib29sICRiaXQpOkJpdEJ1ZmZlcnsKCQkkYnVmSW5kZXggPSBmbG9vcigkdGhpcy0+bGVuZ3RoIC8gOCk7CgoJCWlmKGNvdW50KCR0aGlzLT5idWZmZXIpIDw9ICRidWZJbmRleCl7CgkJCSR0aGlzLT5idWZmZXJbXSA9IDA7CgkJfQoKCQlpZigkYml0ID09PSB0cnVlKXsKCQkJJHRoaXMtPmJ1ZmZlclsoaW50KSRidWZJbmRleF0gfD0gKDB4ODAgPj4gKCR0aGlzLT5sZW5ndGggJSA4KSk7CgkJfQoKCQkkdGhpcy0+bGVuZ3RoKys7CgoJCXJldHVybiAkdGhpczsKCX0KCgkvKioKCSAqIHJldHVybnMgdGhlIGN1cnJlbnQgYnVmZmVyIGxlbmd0aAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0TGVuZ3RoKCk6aW50ewoJCXJldHVybiAkdGhpcy0+bGVuZ3RoOwoJfQoKCS8qKgoJICogcmV0dXJucyB0aGUgYnVmZmVyIGNvbnRlbnQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEJ1ZmZlcigpOmFycmF5ewoJCXJldHVybiAkdGhpcy0+YnVmZmVyOwoJfQoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjI2OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVycyI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI2OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVycyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6IkhlbHBlcnMiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czozNjoiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcQml0QnVmZmVyIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTE6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM2OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xCaXRCdWZmZXIiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJCaXRCdWZmZXIiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjI1OiJIb2xkcyB0aGUgcmF3IGJpbmFyeSBkYXRhIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjI1OiJjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjoxO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO047czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjI6e3M6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXEJpdEJ1ZmZlcjo6JGJ1ZmZlciI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcQml0QnVmZmVyOjokYnVmZmVyIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiYnVmZmVyIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjE4OiJUaGUgYnVmZmVyIGNvbnRlbnQiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6MjoiW10iO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcQml0QnVmZmVyOjokbGVuZ3RoIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xCaXRCdWZmZXI6OiRsZW5ndGgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJsZW5ndGgiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjg6Ikxlbmd0aCBvZiB0aGUgY29udGVudCAoYml0cykiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoxOiIwIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjU6e3M6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXEJpdEJ1ZmZlcjo6Y2xlYXIoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTc6ImNsZWFycyB0aGUgYnVmZmVyIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXEJpdEJ1ZmZlcjo6Y2xlYXIoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6ImNsZWFyIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzY6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXEJpdEJ1ZmZlciI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6IkJpdEJ1ZmZlciI7fX19czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcQml0QnVmZmVyOjpwdXQoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjY6ImFwcGVuZHMgYSBzZXF1ZW5jZSBvZiBiaXRzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXEJpdEJ1ZmZlcjo6cHV0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czozOiJwdXQiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MzoibnVtIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjY6Imxlbmd0aCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM2OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xCaXRCdWZmZXIiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJCaXRCdWZmZXIiO319fXM6NDY6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXEJpdEJ1ZmZlcjo6cHV0Qml0KCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjIwOiJhcHBlbmRzIGEgc2luZ2xlIGJpdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xCaXRCdWZmZXI6OnB1dEJpdCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoicHV0Qml0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjM6ImJpdCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM2OiJcY2hpbGxlcmxhblxRUkNvZGVcSGVscGVyc1xCaXRCdWZmZXIiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJCaXRCdWZmZXIiO319fXM6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXEJpdEJ1ZmZlcjo6Z2V0TGVuZ3RoKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMzOiJyZXR1cm5zIHRoZSBjdXJyZW50IGJ1ZmZlciBsZW5ndGgiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcQml0QnVmZmVyOjpnZXRMZW5ndGgoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6ImdldExlbmd0aCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3ODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXEhlbHBlcnNcQml0QnVmZmVyOjpnZXRCdWZmZXIoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjY6InJldHVybnMgdGhlIGJ1ZmZlciBjb250ZW50IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6ODI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVxIZWxwZXJzXEJpdEJ1ZmZlcjo6Z2V0QnVmZmVyKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJnZXRCdWZmZXIiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6ODU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/W/I/-o5oNoZ2yc2-acWGhKAg b/files/W/I/-o5oNoZ2yc2-acWGhKAg
deleted file mode 100644
index 2df2cff6d..000000000
--- a/files/W/I/-o5oNoZ2yc2-acWGhKAg
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Adf42cd88fecffe804b2371f7c58a3f7f-fdf31860727e6f602019ed692bfd3547
-s:47152:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjM6IkNsYXNzIE1hc2tQYXR0ZXJuVGVzdGVyIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjc6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjIxOiJNYXNrUGF0dGVyblRlc3Rlci5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIyMi4xMS4yMDE3IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyMjoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNyBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTI6Im5vaW5zcGVjdGlvbiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6OToiUGhwVW51c2VkIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiJmZGYzMTg2MDcyN2U2ZjYwMjAxOWVkNjkyYmZkMzU0NyI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjIxOiJNYXNrUGF0dGVyblRlc3Rlci5waHAiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czozMDoic3JjL0RhdGEvTWFza1BhdHRlcm5UZXN0ZXIucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czo0MTAzOiI8P3BocAovKioKICogQ2xhc3MgTWFza1BhdHRlcm5UZXN0ZXIKICoKICogQGZpbGVzb3VyY2UgICBNYXNrUGF0dGVyblRlc3Rlci5waHAKICogQGNyZWF0ZWQgICAgICAyMi4xMS4yMDE3CiAqIEBwYWNrYWdlICAgICAgY2hpbGxlcmxhblxRUkNvZGVcRGF0YQogKiBAYXV0aG9yICAgICAgIFNtaWxleSA8c21pbGV5QGNoaWxsZXJsYW4ubmV0PgogKiBAY29weXJpZ2h0ICAgIDIwMTcgU21pbGV5CiAqIEBsaWNlbnNlICAgICAgTUlUCiAqCiAqIEBub2luc3BlY3Rpb24gUGhwVW51c2VkCiAqLwoKbmFtZXNwYWNlIGNoaWxsZXJsYW5cUVJDb2RlXERhdGE7Cgp1c2UgZnVuY3Rpb24gYWJzLCBhcnJheV9zZWFyY2gsIGNhbGxfdXNlcl9mdW5jX2FycmF5LCBtaW47CgovKioKICogUmVjZWl2ZXMgYSBRUkRhdGFJbnRlcmZhY2Ugb2JqZWN0IGFuZCBydW5zIHRoZSBtYXNrIHBhdHRlcm4gdGVzdHMgb24gaXQuCiAqCiAqIElTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguOC4yIC0gRXZhbHVhdGlvbiBvZiBtYXNraW5nIHJlc3VsdHMKICoKICogQHNlZSBodHRwOi8vd3d3LnRob25reS5jb20vcXItY29kZS10dXRvcmlhbC9kYXRhLW1hc2tpbmcKICovCmZpbmFsIGNsYXNzIE1hc2tQYXR0ZXJuVGVzdGVyewoKCS8qKgoJICogVGhlIGRhdGEgaW50ZXJmYWNlIHRoYXQgY29udGFpbnMgdGhlIGRhdGEgbWF0cml4IHRvIHRlc3QKCSAqLwoJcHJvdGVjdGVkIFFSRGF0YUludGVyZmFjZSAkZGF0YUludGVyZmFjZTsKCgkvKioKCSAqIFJlY2VpdmVzIHRoZSBRUkRhdGFJbnRlcmZhY2UKCSAqCgkgKiBAc2VlIFxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnM6OiRtYXNrUGF0dGVybgoJICogQHNlZSBcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6JG1hc2tQYXR0ZXJuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChRUkRhdGFJbnRlcmZhY2UgJGRhdGFJbnRlcmZhY2UpewoJCSR0aGlzLT5kYXRhSW50ZXJmYWNlID0gJGRhdGFJbnRlcmZhY2U7Cgl9CgoJLyoqCgkgKiBzaG92ZXMgYSBRUk1hdHJpeCB0aHJvdWdoIHRoZSBNYXNrUGF0dGVyblRlc3RlciB0byBmaW5kIHRoZSBsb3dlc3QgcGVuYWx0eSBtYXNrIHBhdHRlcm4KCSAqCgkgKiBAc2VlIFxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE1hc2tQYXR0ZXJuVGVzdGVyCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRCZXN0TWFza1BhdHRlcm4oKTppbnR7CgkJJHBlbmFsdGllcyA9IFtdOwoKCQlmb3IoJHBhdHRlcm4gPSAwOyAkcGF0dGVybiA8IDg7ICRwYXR0ZXJuKyspewoJCQkkcGVuYWx0aWVzWyRwYXR0ZXJuXSA9ICR0aGlzLT50ZXN0UGF0dGVybigkcGF0dGVybik7CgkJfQoKCQlyZXR1cm4gYXJyYXlfc2VhcmNoKG1pbigkcGVuYWx0aWVzKSwgJHBlbmFsdGllcywgdHJ1ZSk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBwZW5hbHR5IGZvciB0aGUgZ2l2ZW4gbWFzayBwYXR0ZXJuCgkgKgoJICogQHNlZSBcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zOjokbWFza1BhdHRlcm4KCSAqIEBzZWUgXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJNYXRyaXg6OiRtYXNrUGF0dGVybgoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdFBhdHRlcm4oaW50ICRwYXR0ZXJuKTppbnR7CgkJJG1hdHJpeCAgPSAkdGhpcy0+ZGF0YUludGVyZmFjZS0+aW5pdE1hdHJpeCgkcGF0dGVybiwgdHJ1ZSk7CgkJJHBlbmFsdHkgPSAwOwoKCQlmb3IoJGxldmVsID0gMTsgJGxldmVsIDw9IDQ7ICRsZXZlbCsrKXsKCQkJJHBlbmFsdHkgKz0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAndGVzdExldmVsJy4kbGV2ZWxdLCBbJG1hdHJpeC0+bWF0cml4KHRydWUpLCAkbWF0cml4LT5zaXplKCldKTsKCQl9CgoJCXJldHVybiAoaW50KSRwZW5hbHR5OwoJfQoKCS8qKgoJICogQ2hlY2tzIGZvciBlYWNoIGdyb3VwIG9mIGZpdmUgb3IgbW9yZSBzYW1lLWNvbG9yZWQgbW9kdWxlcyBpbiBhIHJvdyAob3IgY29sdW1uKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gdGVzdExldmVsMShhcnJheSAkbSwgaW50ICRzaXplKTppbnR7CgkJJHBlbmFsdHkgPSAwOwoKCQlmb3JlYWNoKCRtIGFzICR5ID0+ICRyb3cpewoJCQlmb3JlYWNoKCRyb3cgYXMgJHggPT4gJHZhbCl7CgkJCQkkY291bnQgPSAwOwoKCQkJCWZvcigkcnkgPSAtMTsgJHJ5IDw9IDE7ICRyeSsrKXsKCgkJCQkJaWYoJHkgKyAkcnkgPCAwIHx8ICRzaXplIDw9ICR5ICsgJHJ5KXsKCQkJCQkJY29udGludWU7CgkJCQkJfQoKCQkJCQlmb3IoJHJ4ID0gLTE7ICRyeCA8PSAxOyAkcngrKyl7CgoJCQkJCQlpZigoJHJ5ID09PSAwICYmICRyeCA9PT0gMCkgfHwgKCgkeCArICRyeCkgPCAwIHx8ICRzaXplIDw9ICgkeCArICRyeCkpKXsKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQl9CgoJCQkJCQlpZigkbVskeSArICRyeV1bJHggKyAkcnhdID09PSAkdmFsKXsKCQkJCQkJCSRjb3VudCsrOwoJCQkJCQl9CgoJCQkJCX0KCQkJCX0KCgkJCQlpZigkY291bnQgPiA1KXsKCQkJCQkkcGVuYWx0eSArPSAoMyArICRjb3VudCAtIDUpOwoJCQkJfQoKCQkJfQoJCX0KCgkJcmV0dXJuICRwZW5hbHR5OwoJfQoKCS8qKgoJICogQ2hlY2tzIGZvciBlYWNoIDJ4MiBhcmVhIG9mIHNhbWUtY29sb3JlZCBtb2R1bGVzIGluIHRoZSBtYXRyaXgKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHRlc3RMZXZlbDIoYXJyYXkgJG0sIGludCAkc2l6ZSk6aW50ewoJCSRwZW5hbHR5ID0gMDsKCgkJZm9yZWFjaCgkbSBhcyAkeSA9PiAkcm93KXsKCgkJCWlmKCR5ID4gJHNpemUgLSAyKXsKCQkJCWJyZWFrOwoJCQl9CgoJCQlmb3JlYWNoKCRyb3cgYXMgJHggPT4gJHZhbCl7CgoJCQkJaWYoJHggPiAkc2l6ZSAtIDIpewoJCQkJCWJyZWFrOwoJCQkJfQoKCQkJCWlmKAoJCQkJCSAgICR2YWwgPT09ICRtWyR5XVskeCArIDFdCgkJCQkJJiYgJHZhbCA9PT0gJG1bJHkgKyAxXVskeF0KCQkJCQkmJiAkdmFsID09PSAkbVskeSArIDFdWyR4ICsgMV0KCQkJCSl7CgkJCQkJJHBlbmFsdHkrKzsKCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIDMgKiAkcGVuYWx0eTsKCX0KCgkvKioKCSAqIENoZWNrcyBpZiB0aGVyZSBhcmUgcGF0dGVybnMgdGhhdCBsb29rIHNpbWlsYXIgdG8gdGhlIGZpbmRlciBwYXR0ZXJucyAoMToxOjM6MToxIHJhdGlvKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gdGVzdExldmVsMyhhcnJheSAkbSwgaW50ICRzaXplKTppbnR7CgkJJHBlbmFsdGllcyA9IDA7CgoJCWZvcmVhY2goJG0gYXMgJHkgPT4gJHJvdyl7CgkJCWZvcmVhY2goJHJvdyBhcyAkeCA9PiAkdmFsKXsKCgkJCQlpZigKCQkJCQkkeCArIDYgPCAkc2l6ZQoJCQkJCSYmICAkdmFsCgkJCQkJJiYgISRtWyR5XVskeCArIDFdCgkJCQkJJiYgICRtWyR5XVskeCArIDJdCgkJCQkJJiYgICRtWyR5XVskeCArIDNdCgkJCQkJJiYgICRtWyR5XVskeCArIDRdCgkJCQkJJiYgISRtWyR5XVskeCArIDVdCgkJCQkJJiYgICRtWyR5XVskeCArIDZdCgkJCQkpewoJCQkJCSRwZW5hbHRpZXMrKzsKCQkJCX0KCgkJCQlpZigKCQkJCQkkeSArIDYgPCAkc2l6ZQoJCQkJCSYmICAkdmFsCgkJCQkJJiYgISRtWyR5ICsgMV1bJHhdCgkJCQkJJiYgICRtWyR5ICsgMl1bJHhdCgkJCQkJJiYgICRtWyR5ICsgM11bJHhdCgkJCQkJJiYgICRtWyR5ICsgNF1bJHhdCgkJCQkJJiYgISRtWyR5ICsgNV1bJHhdCgkJCQkJJiYgICRtWyR5ICsgNl1bJHhdCgkJCQkpewoJCQkJCSRwZW5hbHRpZXMrKzsKCQkJCX0KCgkJCX0KCQl9CgoJCXJldHVybiAkcGVuYWx0aWVzICogNDA7Cgl9CgoJLyoqCgkgKiBDaGVja3MgaWYgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIG1vZHVsZXMgYXJlIGRhcmsgb3IgbGlnaHQsIHdpdGggYSBsYXJnZXIgcGVuYWx0eSBmb3IgYSBsYXJnZXIgZGlmZmVyZW5jZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gdGVzdExldmVsNChhcnJheSAkbSwgaW50ICRzaXplKTpmbG9hdHsKCQkkY291bnQgPSAwOwoKCQlmb3JlYWNoKCRtIGFzICR5ID0+ICRyb3cpewoJCQlmb3JlYWNoKCRyb3cgYXMgJHggPT4gJHZhbCl7CgkJCQlpZigkdmFsKXsKCQkJCQkkY291bnQrKzsKCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIChhYnMoMTAwICogJGNvdW50IC8gJHNpemUgLyAkc2l6ZSAtIDUwKSAvIDUpICogMTA7Cgl9Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6MjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiRGF0YSI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjQxOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxNYXNrUGF0dGVyblRlc3RlciI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTWFza1BhdHRlcm5UZXN0ZXIiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoiTWFza1BhdHRlcm5UZXN0ZXIiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjcyOiJSZWNlaXZlcyBhIFFSRGF0YUludGVyZmFjZSBvYmplY3QgYW5kIHJ1bnMgdGhlIG1hc2sgcGF0dGVybiB0ZXN0cyBvbiBpdC4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NjQ6IklTTy9JRUMgMTgwMDQ6MjAwMCBTZWN0aW9uIDguOC4yIC0gRXZhbHVhdGlvbiBvZiBtYXNraW5nIHJlc3VsdHMiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybCI6MTp7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwAdXJpIjtzOjUxOiJodHRwOi8vd3d3LnRob25reS5jb20vcXItY29kZS10dXRvcmlhbC9kYXRhLW1hc2tpbmciO31zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MjI6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGEiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjA6e319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjE7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6MTp7czo1NzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTWFza1BhdHRlcm5UZXN0ZXI6OiRkYXRhSW50ZXJmYWNlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU3OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxNYXNrUGF0dGVyblRlc3Rlcjo6JGRhdGFJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMzoiZGF0YUludGVyZmFjZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1NjoiVGhlIGRhdGEgaW50ZXJmYWNlIHRoYXQgY29udGFpbnMgdGhlIGRhdGEgbWF0cml4IHRvIHRlc3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToiUVJEYXRhSW50ZXJmYWNlIjt9fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6Nzp7czo1NjoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTWFza1BhdHRlcm5UZXN0ZXI6Ol9fY29uc3RydWN0KCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjI4OiJSZWNlaXZlcyB0aGUgUVJEYXRhSW50ZXJmYWNlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjI6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjU0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4iOjE6e3M6NjE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MjoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uczo6JG1hc2tQYXR0ZXJuIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6Im1hc2tQYXR0ZXJuIjt9fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDY6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSTWF0cml4OjokbWFza1BhdHRlcm4iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToibWFza1BhdHRlcm4iO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTY6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE1hc2tQYXR0ZXJuVGVzdGVyOjpfX2NvbnN0cnVjdCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6Il9fY29uc3RydWN0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjEzOiJkYXRhSW50ZXJmYWNlIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJRUkRhdGFJbnRlcmZhY2UiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mzk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e319czo2MzoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTWFza1BhdHRlcm5UZXN0ZXI6OmdldEJlc3RNYXNrUGF0dGVybigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo4Nzoic2hvdmVzIGEgUVJNYXRyaXggdGhyb3VnaCB0aGUgTWFza1BhdHRlcm5UZXN0ZXIgdG8gZmluZCB0aGUgbG93ZXN0IHBlbmFsdHkgbWFzayBwYXR0ZXJuIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjU0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4iOjE6e3M6NjE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTWFza1BhdHRlcm5UZXN0ZXIiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoiTWFza1BhdHRlcm5UZXN0ZXIiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE1hc2tQYXR0ZXJuVGVzdGVyOjpnZXRCZXN0TWFza1BhdHRlcm4oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE4OiJnZXRCZXN0TWFza1BhdHRlcm4iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTY6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE1hc2tQYXR0ZXJuVGVzdGVyOjp0ZXN0UGF0dGVybigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0NjoiUmV0dXJucyB0aGUgcGVuYWx0eSBmb3IgdGhlIGdpdmVuIG1hc2sgcGF0dGVybiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDI6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnM6OiRtYXNrUGF0dGVybiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJtYXNrUGF0dGVybiI7fX1zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbiI6MTp7czo2MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbgBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeDo6JG1hc2tQYXR0ZXJuIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6Im1hc2tQYXR0ZXJuIjt9fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU2OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxNYXNrUGF0dGVyblRlc3Rlcjo6dGVzdFBhdHRlcm4oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJ0ZXN0UGF0dGVybiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJwYXR0ZXJuIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjY0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjU1OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxNYXNrUGF0dGVyblRlc3Rlcjo6dGVzdExldmVsMSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo3OToiQ2hlY2tzIGZvciBlYWNoIGdyb3VwIG9mIGZpdmUgb3IgbW9yZSBzYW1lLWNvbG9yZWQgbW9kdWxlcyBpbiBhIHJvdyAob3IgY29sdW1uKSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjc1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU1OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxNYXNrUGF0dGVyblRlc3Rlcjo6dGVzdExldmVsMSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6InRlc3RMZXZlbDEiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MToibSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoic2l6ZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo3ODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1NToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTWFza1BhdHRlcm5UZXN0ZXI6OnRlc3RMZXZlbDIoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NjI6IkNoZWNrcyBmb3IgZWFjaCAyeDIgYXJlYSBvZiBzYW1lLWNvbG9yZWQgbW9kdWxlcyBpbiB0aGUgbWF0cml4IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTE0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU1OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxNYXNrUGF0dGVyblRlc3Rlcjo6dGVzdExldmVsMigpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6InRlc3RMZXZlbDIiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MToibSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoic2l6ZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMTc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTU6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE1hc2tQYXR0ZXJuVGVzdGVyOjp0ZXN0TGV2ZWwzKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjg3OiJDaGVja3MgaWYgdGhlcmUgYXJlIHBhdHRlcm5zIHRoYXQgbG9vayBzaW1pbGFyIHRvIHRoZSBmaW5kZXIgcGF0dGVybnMgKDE6MTozOjE6MSByYXRpbykiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNDU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTU6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXE1hc2tQYXR0ZXJuVGVzdGVyOjp0ZXN0TGV2ZWwzKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoidGVzdExldmVsMyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czoxOiJtIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJzaXplIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE0ODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1NToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTWFza1BhdHRlcm5UZXN0ZXI6OnRlc3RMZXZlbDQoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTA0OiJDaGVja3MgaWYgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIG1vZHVsZXMgYXJlIGRhcmsgb3IgbGlnaHQsIHdpdGggYSBsYXJnZXIgcGVuYWx0eSBmb3IgYSBsYXJnZXIgZGlmZmVyZW5jZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE4NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1NToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcTWFza1BhdHRlcm5UZXN0ZXI6OnRlc3RMZXZlbDQoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJ0ZXN0TGV2ZWw0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjE6Im0iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6InNpemUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTg5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcRmxvYXRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/X/J/RohjfFkFjlwsDy6kxPdw b/files/X/J/RohjfFkFjlwsDy6kxPdw
deleted file mode 100644
index da0f3b9b1..000000000
--- a/files/X/J/RohjfFkFjlwsDy6kxPdw
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Ae821eb855be9bafd757aab41d206fdb2-c976d852ca5b8a0c6985c77c30f654e2
-s:134944:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjA6IlRyYWl0IFFST3B0aW9uc1RyYWl0IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjc6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6MTA6ImZpbGVzb3VyY2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE4OiJRUk9wdGlvbnNUcmFpdC5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIxMC4wMy4yMDE4IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxNzoiY2hpbGxlcmxhblxRUkNvZGUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6Njoic21pbGV5IjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjIxOiJzbWlsZXlAY2hpbGxlcmxhbi5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjQ7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTE6IjIwMTggc21pbGV5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo1O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozOiJNSVQiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjY7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEyOiJub2luc3BlY3Rpb24iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjk6IlBocFVudXNlZCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiYzk3NmQ4NTJjYTViOGEwYzY5ODVjNzdjMzBmNjU0ZTIiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxODoiUVJPcHRpb25zVHJhaXQucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6MjI6InNyYy9RUk9wdGlvbnNUcmFpdC5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjcxMjI6Ijw/cGhwCi8qKgogKiBUcmFpdCBRUk9wdGlvbnNUcmFpdAogKgogKiBAZmlsZXNvdXJjZSAgIFFST3B0aW9uc1RyYWl0LnBocAogKiBAY3JlYXRlZCAgICAgIDEwLjAzLjIwMTgKICogQHBhY2thZ2UgICAgICBjaGlsbGVybGFuXFFSQ29kZQogKiBAYXV0aG9yICAgICAgIHNtaWxleSA8c21pbGV5QGNoaWxsZXJsYW4ubmV0PgogKiBAY29weXJpZ2h0ICAgIDIwMTggc21pbGV5CiAqIEBsaWNlbnNlICAgICAgTUlUCiAqCiAqIEBub2luc3BlY3Rpb24gUGhwVW51c2VkCiAqLwoKbmFtZXNwYWNlIGNoaWxsZXJsYW5cUVJDb2RlOwoKdXNlIGZ1bmN0aW9uIGFycmF5X3ZhbHVlcywgY291bnQsIGluX2FycmF5LCBpc19udW1lcmljLCBtYXgsIG1pbiwgc3ByaW50Ziwgc3RydG9sb3dlcjsKCi8qKgogKiBUaGUgUVJDb2RlIHBsdWctaW4gc2V0dGluZ3MgJiBzZXR0ZXIgZnVuY3Rpb25hbGl0eQogKi8KdHJhaXQgUVJPcHRpb25zVHJhaXR7CgoJLyoqCgkgKiBRUiBDb2RlIHZlcnNpb24gbnVtYmVyCgkgKgoJICogWzEgLi4uIDQwXSBvciBRUkNvZGU6OlZFUlNJT05fQVVUTwoJICovCglwcm90ZWN0ZWQgaW50ICR2ZXJzaW9uID0gUVJDb2RlOjpWRVJTSU9OX0FVVE87CgoJLyoqCgkgKiBNaW5pbXVtIFFSIHZlcnNpb24KCSAqCgkgKiBpZiAkdmVyc2lvbiA9IFFSQ29kZTo6VkVSU0lPTl9BVVRPCgkgKi8KCXByb3RlY3RlZCBpbnQgJHZlcnNpb25NaW4gPSAxOwoKCS8qKgoJICogTWF4aW11bSBRUiB2ZXJzaW9uCgkgKi8KCXByb3RlY3RlZCBpbnQgJHZlcnNpb25NYXggPSA0MDsKCgkvKioKCSAqIEVycm9yIGNvcnJlY3QgbGV2ZWwKCSAqCgkgKiBRUkNvZGU6OkVDQ19YIHdoZXJlIFggaXM6CgkgKgoJICogICAtIEwgPT4gIDclCgkgKiAgIC0gTSA9PiAxNSUKCSAqICAgLSBRID0+IDI1JQoJICogICAtIEggPT4gMzAlCgkgKi8KCXByb3RlY3RlZCBpbnQgJGVjY0xldmVsID0gUVJDb2RlOjpFQ0NfTDsKCgkvKioKCSAqIE1hc2sgUGF0dGVybiB0byB1c2UKCSAqCgkgKiBbMC4uLjddIG9yIFFSQ29kZTo6TUFTS19QQVRURVJOX0FVVE8KCSAqLwoJcHJvdGVjdGVkIGludCAkbWFza1BhdHRlcm4gPSBRUkNvZGU6Ok1BU0tfUEFUVEVSTl9BVVRPOwoKCS8qKgoJICogQWRkIGEgInF1aWV0IHpvbmUiIChtYXJnaW4pIGFjY29yZGluZyB0byB0aGUgUVIgY29kZSBzcGVjCgkgKi8KCXByb3RlY3RlZCBib29sICRhZGRRdWlldHpvbmUgPSB0cnVlOwoKCS8qKgoJICogU2l6ZSBvZiB0aGUgcXVpZXQgem9uZQoJICoKCSAqIGludGVybmFsbHkgY2xhbXBlZCB0byBbMCAuLi4gJG1vZHVsZUNvdW50IC8gMl0sIGRlZmF1bHRzIHRvIDQgbW9kdWxlcwoJICovCglwcm90ZWN0ZWQgaW50ICRxdWlldHpvbmVTaXplID0gNDsKCgkvKioKCSAqIFVzZSB0aGlzIHRvIGNpcmN1bXZlbnQgdGhlIGRhdGEgbW9kZSBkZXRlY3Rpb24gYW5kIGZvcmNlIHRoZSB1c2FnZSBvZiB0aGUgZ2l2ZW4gbW9kZS4KCSAqCgkgKiB2YWxpZCBtb2RlcyBhcmU6IE51bWJlciwgQWxwaGFOdW0sIEthbmppLCBCeXRlIChjYXNlIGluc2Vuc2l0aXZlKQoJICoKCSAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoaWxsZXJsYW4vcGhwLXFyY29kZS9pc3N1ZXMvMzkKCSAqLwoJcHJvdGVjdGVkID9zdHJpbmcgJGRhdGFNb2RlT3ZlcnJpZGUgPSBudWxsOwoKCS8qKgoJICogVGhlIG91dHB1dCB0eXBlCgkgKgoJICogICAtIFFSQ29kZTo6T1VUUFVUX01BUktVUF9YWFhYIHdoZXJlIFhYWFggPSBIVE1MLCBTVkcKCSAqICAgLSBRUkNvZGU6Ok9VVFBVVF9JTUFHRV9YWFggd2hlcmUgWFhYID0gUE5HLCBHSUYsIEpQRwoJICogICAtIFFSQ29kZTo6T1VUUFVUX1NUUklOR19YWFhYIHdoZXJlIFhYWFggPSBURVhULCBKU09OCgkgKiAgIC0gUVJDb2RlOjpPVVRQVVRfQ1VTVE9NCgkgKi8KCXByb3RlY3RlZCBzdHJpbmcgJG91dHB1dFR5cGUgPSBRUkNvZGU6Ok9VVFBVVF9JTUFHRV9QTkc7CgoJLyoqCgkgKiB0aGUgRlFDTiBvZiB0aGUgY3VzdG9tIFFST3V0cHV0SW50ZXJmYWNlIGlmICRvdXRwdXRUeXBlIGlzIHNldCB0byBRUkNvZGU6Ok9VVFBVVF9DVVNUT00KCSAqLwoJcHJvdGVjdGVkID9zdHJpbmcgJG91dHB1dEludGVyZmFjZSA9IG51bGw7CgoJLyoqCgkgKiAvcGF0aC90by9jYWNoZS5maWxlCgkgKi8KCXByb3RlY3RlZCA/c3RyaW5nICRjYWNoZWZpbGUgPSBudWxsOwoKCS8qKgoJICogbmV3bGluZSBzdHJpbmcgW0hUTUwsIFNWRywgVEVYVF0KCSAqLwoJcHJvdGVjdGVkIHN0cmluZyAkZW9sID0gUEhQX0VPTDsKCgkvKioKCSAqIHNpemUgb2YgYSBRUiBjb2RlIHBpeGVsIFtTVkcsIElNQUdFXypdLCBIVE1MIHZpYSBDU1MKCSAqLwoJcHJvdGVjdGVkIGludCAkc2NhbGUgPSA1OwoKCS8qKgoJICogYSBjb21tb24gY3NzIGNsYXNzCgkgKi8KCXByb3RlY3RlZCBzdHJpbmcgJGNzc0NsYXNzID0gJyc7CgoJLyoqCgkgKiBTVkcgb3BhY2l0eQoJICovCglwcm90ZWN0ZWQgZmxvYXQgJHN2Z09wYWNpdHkgPSAxLjA7CgoJLyoqCgkgKiBhbnl0aGluZyBiZXR3ZWVuIDxkZWZzPgoJICoKCSAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0VsZW1lbnQvZGVmcwoJICovCglwcm90ZWN0ZWQgc3RyaW5nICRzdmdEZWZzID0gJzxzdHlsZT5yZWN0e3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzfTwvc3R5bGU+JzsKCgkvKioKCSAqIFNWRyB2aWV3Qm94IHNpemUuIGEgc2luZ2xlIGludGVnZXIgbnVtYmVyIHdoaWNoIGRlZmluZXMgd2lkdGgvaGVpZ2h0IG9mIHRoZSB2aWV3Qm94IGF0dHJpYnV0ZS4KCSAqCgkgKiB2aWV3Qm94PSIwIDAgeCB4IgoJICoKCSAqIEBzZWUgaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zY2FsZS1zdmcvI2FydGljbGUtaGVhZGVyLWlkLTMKCSAqLwoJcHJvdGVjdGVkID9pbnQgJHN2Z1ZpZXdCb3hTaXplID0gbnVsbDsKCgkvKioKCSAqIHN0cmluZyBzdWJzdGl0dXRlIGZvciBkYXJrCgkgKi8KCXByb3RlY3RlZCBzdHJpbmcgJHRleHREYXJrID0gJ/CflLQnOwoKCS8qKgoJICogc3RyaW5nIHN1YnN0aXR1dGUgZm9yIGxpZ2h0CgkgKi8KCXByb3RlY3RlZCBzdHJpbmcgJHRleHRMaWdodCA9ICfirZUnOwoKCS8qKgoJICogbWFya3VwIHN1YnN0aXR1dGUgZm9yIGRhcmsgKENTUyB2YWx1ZSkKCSAqLwoJcHJvdGVjdGVkIHN0cmluZyAkbWFya3VwRGFyayA9ICcjMDAwJzsKCgkvKioKCSAqIG1hcmt1cCBzdWJzdGl0dXRlIGZvciBsaWdodCAoQ1NTIHZhbHVlKQoJICovCglwcm90ZWN0ZWQgc3RyaW5nICRtYXJrdXBMaWdodCA9ICcjZmZmJzsKCgkvKioKCSAqIFJldHVybiB0aGUgaW1hZ2UgcmVzb3VyY2UgaW5zdGVhZCBvZiBhIHJlbmRlciBpZiBhcHBsaWNhYmxlLgoJICogVGhpcyBvcHRpb24gb3ZlcnJpZGVzIG90aGVyIG91dHB1dCBvcHRpb25zLCBzdWNoIGFzICRjYWNoZWZpbGUgYW5kICRpbWFnZUJhc2U2NC4KCSAqCgkgKiBTdXBwb3J0ZWQgYnkgdGhlIGZvbGxvd2luZyBtb2R1bGVzOgoJICoKCSAqIC0gUVJJbWFnZTogICByZXNvdXJjZSAoUEhQIDwgOCksIEdkSW1hZ2UKCSAqIC0gUVJJbWFnaWNrOiBJbWFnaWNrCgkgKiAtIFFSRnBkZjogICAgRlBERgoJICoKCSAqIEBzZWUgXGNoaWxsZXJsYW5cUVJDb2RlXE91dHB1dFxRUk91dHB1dEludGVyZmFjZTo6ZHVtcCgpCgkgKgoJICogQHZhciBib29sCgkgKi8KCXByb3RlY3RlZCBib29sICRyZXR1cm5SZXNvdXJjZSA9IGZhbHNlOwoKCS8qKgoJICogdG9nZ2xlIGJhc2U2NCBvciByYXcgaW1hZ2UgZGF0YQoJICovCglwcm90ZWN0ZWQgYm9vbCAkaW1hZ2VCYXNlNjQgPSB0cnVlOwoKCS8qKgoJICogdG9nZ2xlIHRyYW5zcGFyZW5jeSwgbm90IHN1cHBvcnRlZCBieSBqcGcKCSAqLwoJcHJvdGVjdGVkIGJvb2wgJGltYWdlVHJhbnNwYXJlbnQgPSB0cnVlOwoKCS8qKgoJICogQHNlZSBpbWFnZWNvbG9ydHJhbnNwYXJlbnQoKQoJICoKCSAqIFtSLCBHLCBCXQoJICovCglwcm90ZWN0ZWQgYXJyYXkgJGltYWdlVHJhbnNwYXJlbmN5QkcgPSBbMjU1LCAyNTUsIDI1NV07CgoJLyoqCgkgKiBAc2VlIGltYWdlcG5nKCkKCSAqLwoJcHJvdGVjdGVkIGludCAkcG5nQ29tcHJlc3Npb24gPSAtMTsKCgkvKioKCSAqIEBzZWUgaW1hZ2VqcGVnKCkKCSAqLwoJcHJvdGVjdGVkIGludCAkanBlZ1F1YWxpdHkgPSA4NTsKCgkvKioKCSAqIEltYWdpY2sgb3V0cHV0IGZvcm1hdAoJICoKCSAqIEBzZWUgXEltYWdpY2s6OnNldFR5cGUoKQoJICovCglwcm90ZWN0ZWQgc3RyaW5nICRpbWFnaWNrRm9ybWF0ID0gJ3BuZyc7CgoJLyoqCgkgKiBJbWFnaWNrIGJhY2tncm91bmQgY29sb3IgKGRlZmF1bHRzIHRvICJ0cmFuc3BhcmVudCIpCgkgKgoJICogQHNlZSBcSW1hZ2lja1BpeGVsOjpfX2NvbnN0cnVjdCgpCgkgKi8KCXByb3RlY3RlZCA/c3RyaW5nICRpbWFnaWNrQkcgPSBudWxsOwoKCS8qKgoJICogTWVhc3VyZW1lbnQgdW5pdCBmb3IgRlBERiBvdXRwdXQ6IHB0LCBtbSwgY20sIGluIChkZWZhdWx0cyB0byAicHQiKQoJICoKCSAqIEBzZWUgXEZQREY6Ol9fY29uc3RydWN0KCkKCSAqLwoJcHJvdGVjdGVkIHN0cmluZyAkZnBkZk1lYXN1cmVVbml0ID0gJ3B0JzsKCgkvKioKCSAqIE1vZHVsZSB2YWx1ZXMgbWFwCgkgKgoJICogICAtIEhUTUwsIElNQUdJQ0s6ICNBQkNERUYsIGNzc25hbWUsIHJnYigpLCByZ2JhKCkuLi4KCSAqICAgLSBJTUFHRTogWzYzLCAxMjcsIDI1NV0gLy8gUiwgRywgQgoJICovCglwcm90ZWN0ZWQgP2FycmF5ICRtb2R1bGVWYWx1ZXMgPSBudWxsOwoKCS8qKgoJICogY2xhbXAgbWluL21heCB2ZXJzaW9uIG51bWJlcgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0TWluTWF4VmVyc2lvbihpbnQgJHZlcnNpb25NaW4sIGludCAkdmVyc2lvbk1heCk6dm9pZHsKCQkkbWluID0gbWF4KDEsIG1pbig0MCwgJHZlcnNpb25NaW4pKTsKCQkkbWF4ID0gbWF4KDEsIG1pbig0MCwgJHZlcnNpb25NYXgpKTsKCgkJJHRoaXMtPnZlcnNpb25NaW4gPSBtaW4oJG1pbiwgJG1heCk7CgkJJHRoaXMtPnZlcnNpb25NYXggPSBtYXgoJG1pbiwgJG1heCk7Cgl9CgoJLyoqCgkgKiBzZXRzIHRoZSBtaW5pbXVtIHZlcnNpb24gbnVtYmVyCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRfdmVyc2lvbk1pbihpbnQgJHZlcnNpb24pOnZvaWR7CgkJJHRoaXMtPnNldE1pbk1heFZlcnNpb24oJHZlcnNpb24sICR0aGlzLT52ZXJzaW9uTWF4KTsKCX0KCgkvKioKCSAqIHNldHMgdGhlIG1heGltdW0gdmVyc2lvbiBudW1iZXIKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldF92ZXJzaW9uTWF4KGludCAkdmVyc2lvbik6dm9pZHsKCQkkdGhpcy0+c2V0TWluTWF4VmVyc2lvbigkdGhpcy0+dmVyc2lvbk1pbiwgJHZlcnNpb24pOwoJfQoKCS8qKgoJICogc2V0cyB0aGUgZXJyb3IgY29ycmVjdGlvbiBsZXZlbAoJICoKCSAqIEB0aHJvd3MgXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZUV4Y2VwdGlvbgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0X2VjY0xldmVsKGludCAkZWNjTGV2ZWwpOnZvaWR7CgoJCWlmKCFpc3NldChRUkNvZGU6OkVDQ19NT0RFU1skZWNjTGV2ZWxdKSl7CgkJCXRocm93IG5ldyBRUkNvZGVFeGNlcHRpb24oc3ByaW50ZignSW52YWxpZCBlcnJvciBjb3JyZWN0IGxldmVsOiAlcycsICRlY2NMZXZlbCkpOwoJCX0KCgkJJHRoaXMtPmVjY0xldmVsID0gJGVjY0xldmVsOwoJfQoKCS8qKgoJICogc2V0cy9jbGFtcHMgdGhlIG1hc2sgcGF0dGVybgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0X21hc2tQYXR0ZXJuKGludCAkbWFza1BhdHRlcm4pOnZvaWR7CgoJCWlmKCRtYXNrUGF0dGVybiAhPT0gUVJDb2RlOjpNQVNLX1BBVFRFUk5fQVVUTyl7CgkJCSR0aGlzLT5tYXNrUGF0dGVybiA9IG1heCgwLCBtaW4oNywgJG1hc2tQYXR0ZXJuKSk7CgkJfQoKCX0KCgkvKioKCSAqIHNldHMgdGhlIHRyYW5zcGFyZW5jeSBiYWNrZ3JvdW5kIGNvbG9yCgkgKgoJICogQHRocm93cyBcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlRXhjZXB0aW9uCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRfaW1hZ2VUcmFuc3BhcmVuY3lCRyhhcnJheSAkaW1hZ2VUcmFuc3BhcmVuY3lCRyk6dm9pZHsKCgkJLy8gaW52YWxpZCB2YWx1ZSAtIHNldCB0byB3aGl0ZSBhcyBkZWZhdWx0CgkJaWYoY291bnQoJGltYWdlVHJhbnNwYXJlbmN5QkcpIDwgMyl7CgkJCSR0aGlzLT5pbWFnZVRyYW5zcGFyZW5jeUJHID0gWzI1NSwgMjU1LCAyNTVdOwoKCQkJcmV0dXJuOwoJCX0KCgkJZm9yZWFjaCgkaW1hZ2VUcmFuc3BhcmVuY3lCRyBhcyAkayA9PiAkdil7CgoJCQkvLyBjdXQgb2ZmIGV4Y2VlZGluZyBpdGVtcwoJCQlpZigkayA+IDIpewoJCQkJYnJlYWs7CgkJCX0KCgkJCWlmKCFpc19udW1lcmljKCR2KSl7CgkJCQl0aHJvdyBuZXcgUVJDb2RlRXhjZXB0aW9uKCdJbnZhbGlkIFJHQiB2YWx1ZS4nKTsKCQkJfQoKCQkJLy8gY2xhbXAgdGhlIHZhbHVlcwoJCQkkdGhpcy0+aW1hZ2VUcmFuc3BhcmVuY3lCR1ska10gPSBtYXgoMCwgbWluKDI1NSwgKGludCkkdikpOwoJCX0KCgkJLy8gdXNlIHRoZSBhcnJheSB2YWx1ZXMgdG8gbm90IHJ1biBpbnRvIGVycm9ycyB3aXRoIHRoZSBzcHJlYWQgb3BlcmF0b3IgKC4uLiRhcnIpCgkJJHRoaXMtPmltYWdlVHJhbnNwYXJlbmN5QkcgPSBhcnJheV92YWx1ZXMoJHRoaXMtPmltYWdlVHJhbnNwYXJlbmN5QkcpOwoJfQoKCS8qKgoJICogc2V0cy9jbGFtcHMgdGhlIHZlcnNpb24gbnVtYmVyCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRfdmVyc2lvbihpbnQgJHZlcnNpb24pOnZvaWR7CgoJCWlmKCR2ZXJzaW9uICE9PSBRUkNvZGU6OlZFUlNJT05fQVVUTyl7CgkJCSR0aGlzLT52ZXJzaW9uID0gbWF4KDEsIG1pbig0MCwgJHZlcnNpb24pKTsKCQl9CgoJfQoKCS8qKgoJICogc2V0cyB0aGUgRlBERiBtZWFzdXJlbWVudCB1bml0CgkgKgoJICogQGNvZGVDb3ZlcmFnZUlnbm9yZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0X2ZwZGZNZWFzdXJlVW5pdChzdHJpbmcgJHVuaXQpOnZvaWR7CgkJJHVuaXQgPSBzdHJ0b2xvd2VyKCR1bml0KTsKCgkJaWYoaW5fYXJyYXkoJHVuaXQsIFsnY20nLCAnaW4nLCAnbW0nLCAncHQnXSwgdHJ1ZSkpewoJCQkkdGhpcy0+ZnBkZk1lYXN1cmVVbml0ID0gJHVuaXQ7CgkJfQoKCQkvLyBAdG9kbyB0aHJvdyBvciBpZ25vcmUgc2lsZW50bHk/Cgl9Cgp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6MTg6IlxjaGlsbGVybGFuXFFSQ29kZSI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjE4OiJcY2hpbGxlcmxhblxRUkNvZGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJRUkNvZGUiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MTp7czozMzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0IjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XyI6Njp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzM6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJRUk9wdGlvbnNUcmFpdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTA6IlRoZSBRUkNvZGUgcGx1Zy1pbiBzZXR0aW5ncyAmIHNldHRlciBmdW5jdGlvbmFsaXR5IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjE3OiJjaGlsbGVybGFuXFFSQ29kZSI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AcHJvcGVydGllcyI7YTozMTp7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokdmVyc2lvbiI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokdmVyc2lvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjc6InZlcnNpb24iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjI6IlFSIENvZGUgdmVyc2lvbiBudW1iZXIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzQ6IlsxIC4uLiA0MF0gb3IgUVJDb2RlOjpWRVJTSU9OX0FVVE8iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjM5OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpWRVJTSU9OX0FVVE8iO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiR2ZXJzaW9uTWluIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiR2ZXJzaW9uTWluIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6InZlcnNpb25NaW4iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTg6Ik1pbmltdW0gUVIgdmVyc2lvbiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozNDoiaWYgJHZlcnNpb24gPSBRUkNvZGU6OlZFUlNJT05fQVVUTyI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6MToiMSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NDY6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JHZlcnNpb25NYXgiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDY6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JHZlcnNpb25NYXgiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoidmVyc2lvbk1heCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxODoiTWF4aW11bSBRUiB2ZXJzaW9uIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mzg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6MjoiNDAiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQ0OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRlY2NMZXZlbCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NDoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokZWNjTGV2ZWwiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJlY2NMZXZlbCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxOToiRXJyb3IgY29ycmVjdCBsZXZlbCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo3NDoiUVJDb2RlOjpFQ0NfWCB3aGVyZSBYIGlzOgoKLSBMID0+ICA3JSUKLSBNID0+IDE1JSUKLSBRID0+IDI1JSUKLSBIID0+IDMwJSUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpFQ0NfTCI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjUzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JG1hc2tQYXR0ZXJuIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRtYXNrUGF0dGVybiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjExOiJtYXNrUGF0dGVybiI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxOToiTWFzayBQYXR0ZXJuIHRvIHVzZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozNjoiWzAuLi43XSBvciBRUkNvZGU6Ok1BU0tfUEFUVEVSTl9BVVRPIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3NTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0NDoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZTo6TUFTS19QQVRURVJOX0FVVE8iO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRhZGRRdWlldHpvbmUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JGFkZFF1aWV0em9uZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJhZGRRdWlldHpvbmUiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTc6IkFkZCBhICJxdWlldCB6b25lIiAobWFyZ2luKSBhY2NvcmRpbmcgdG8gdGhlIFFSIGNvZGUgc3BlYyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjYyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQ6InRydWUiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQm9vbGVhbiI6MDp7fX1zOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRxdWlldHpvbmVTaXplIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRxdWlldHpvbmVTaXplIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6InF1aWV0em9uZVNpemUiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjI6IlNpemUgb2YgdGhlIHF1aWV0IHpvbmUiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6Njk6ImludGVybmFsbHkgY2xhbXBlZCB0byBbMCAuLi4gJG1vZHVsZUNvdW50IC8gMl0sIGRlZmF1bHRzIHRvIDQgbW9kdWxlcyI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Njc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6MToiNCI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjcyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JGRhdGFNb2RlT3ZlcnJpZGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JGRhdGFNb2RlT3ZlcnJpZGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoiZGF0YU1vZGVPdmVycmlkZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo4NToiVXNlIHRoaXMgdG8gY2lyY3VtdmVudCB0aGUgZGF0YSBtb2RlIGRldGVjdGlvbiBhbmQgZm9yY2UgdGhlIHVzYWdlIG9mIHRoZSBnaXZlbiBtb2RlLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo2NToidmFsaWQgbW9kZXMgYXJlOiBOdW1iZXIsIEFscGhhTnVtLCBLYW5qaSwgQnl0ZSAoY2FzZSBpbnNlbnNpdGl2ZSkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybCI6MTp7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwAdXJpIjtzOjUwOiJodHRwczovL2dpdGh1Yi5jb20vY2hpbGxlcmxhbi9waHAtcXJjb2RlL2lzc3Vlcy8zOSI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjc0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQ6Im51bGwiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo4MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTnVsbGFibGUiOjE6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTnVsbGFibGUAcmVhbFR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9fX1zOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRvdXRwdXRUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRvdXRwdXRUeXBlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6Im91dHB1dFR5cGUiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTU6IlRoZSBvdXRwdXQgdHlwZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxODE6Ii0gUVJDb2RlOjpPVVRQVVRfTUFSS1VQX1hYWFggd2hlcmUgWFhYWCA9IEhUTUwsIFNWRwotIFFSQ29kZTo6T1VUUFVUX0lNQUdFX1hYWCB3aGVyZSBYWFggPSBQTkcsIEdJRiwgSlBHCi0gUVJDb2RlOjpPVVRQVVRfU1RSSU5HX1hYWFggd2hlcmUgWFhYWCA9IFRFWFQsIEpTT04KLSBRUkNvZGU6Ok9VVFBVVF9DVVNUT00iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjgzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQzOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlOjpPVVRQVVRfSU1BR0VfUE5HIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e319czo1MToiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0Ojokb3V0cHV0SW50ZXJmYWNlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUxOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRvdXRwdXRJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToib3V0cHV0SW50ZXJmYWNlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjg3OiJ0aGUgRlFDTiBvZiB0aGUgY3VzdG9tIFFST3V0cHV0SW50ZXJmYWNlIGlmICRvdXRwdXRUeXBlIGlzIHNldCB0byBRUkNvZGU6Ok9VVFBVVF9DVVNUT00iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3NTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0OiJudWxsIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE51bGxhYmxlIjoxOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE51bGxhYmxlAHJlYWxUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX19czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokY2FjaGVmaWxlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRjYWNoZWZpbGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJjYWNoZWZpbGUiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTk6Ii9wYXRoL3RvL2NhY2hlLmZpbGUiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3NTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5ODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0OiJudWxsIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTAxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xOdWxsYWJsZSI6MTp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xOdWxsYWJsZQByZWFsVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e319fXM6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JGVvbCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokZW9sIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MzoiZW9sIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMyOiJuZXdsaW5lIHN0cmluZyBbSFRNTCwgU1ZHLCBURVhUXSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEwMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo3OiJQSFBfRU9MIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTA2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9fXM6NDE6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JHNjYWxlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQxOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRzY2FsZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6InNjYWxlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjUyOiJzaXplIG9mIGEgUVIgY29kZSBwaXhlbCBbU1ZHLCBJTUFHRV8qXSwgSFRNTCB2aWEgQ1NTIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTA4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjE6IjUiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMTE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo0NDoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokY3NzQ2xhc3MiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDQ6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JGNzc0NsYXNzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6ODoiY3NzQ2xhc3MiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTg6ImEgY29tbW9uIGNzcyBjbGFzcyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoyOiInJyI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjExNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX1zOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRzdmdPcGFjaXR5IjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRzdmdPcGFjaXR5IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6InN2Z09wYWNpdHkiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTE6IlNWRyBvcGFjaXR5IjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTE4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjM6IjEuMCI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEyMTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcRmxvYXRfIjowOnt9fXM6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JHN2Z0RlZnMiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDM6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JHN2Z0RlZnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJzdmdEZWZzIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjIzOiJhbnl0aGluZyBiZXR3ZWVuIDxkZWZzPiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybCI6MTp7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwAdXJpIjtzOjU1OiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9TVkcvRWxlbWVudC9kZWZzIjt9czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTIzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQ5OiInPHN0eWxlPnJlY3R7c2hhcGUtcmVuZGVyaW5nOmNyaXNwRWRnZXN9PC9zdHlsZT4nIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTI4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9fXM6NTA6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JHN2Z1ZpZXdCb3hTaXplIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRzdmdWaWV3Qm94U2l6ZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJzdmdWaWV3Qm94U2l6ZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo5NDoiU1ZHIHZpZXdCb3ggc2l6ZS4gYSBzaW5nbGUgaW50ZWdlciBudW1iZXIgd2hpY2ggZGVmaW5lcyB3aWR0aC9oZWlnaHQgb2YgdGhlIHZpZXdCb3ggYXR0cmlidXRlLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxNzoidmlld0JveD0iMCAwIHggeCIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXFVybCI6MTp7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwAdXJpIjtzOjUzOiJodHRwczovL2Nzcy10cmlja3MuY29tL3NjYWxlLXN2Zy8jYXJ0aWNsZS1oZWFkZXItaWQtMyI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEzMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0OiJudWxsIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTM3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xOdWxsYWJsZSI6MTp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xOdWxsYWJsZQByZWFsVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319fXM6NDQ6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JHRleHREYXJrIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ0OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiR0ZXh0RGFyayI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6InRleHREYXJrIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjI2OiJzdHJpbmcgc3Vic3RpdHV0ZSBmb3IgZGFyayI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEzOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo2OiIn8J+UtCciO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNDI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e319czo0NToiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokdGV4dExpZ2h0IjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiR0ZXh0TGlnaHQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJ0ZXh0TGlnaHQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjc6InN0cmluZyBzdWJzdGl0dXRlIGZvciBsaWdodCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE0NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo1OiIn4q2VJyI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE0NztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX1zOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRtYXJrdXBEYXJrIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRtYXJrdXBEYXJrIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6Im1hcmt1cERhcmsiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mzg6Im1hcmt1cCBzdWJzdGl0dXRlIGZvciBkYXJrIChDU1MgdmFsdWUpIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTQ5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjY6IicjMDAwJyI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE1MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX1zOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRtYXJrdXBMaWdodCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokbWFya3VwTGlnaHQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToibWFya3VwTGlnaHQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mzk6Im1hcmt1cCBzdWJzdGl0dXRlIGZvciBsaWdodCAoQ1NTIHZhbHVlKSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE1NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo2OiInI2ZmZiciO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNTc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e319czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokcmV0dXJuUmVzb3VyY2UiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTA6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JHJldHVyblJlc291cmNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTQ6InJldHVyblJlc291cmNlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjYwOiJSZXR1cm4gdGhlIGltYWdlIHJlc291cmNlIGluc3RlYWQgb2YgYSByZW5kZXIgaWYgYXBwbGljYWJsZS4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTk4OiJUaGlzIG9wdGlvbiBvdmVycmlkZXMgb3RoZXIgb3V0cHV0IG9wdGlvbnMsIHN1Y2ggYXMgJGNhY2hlZmlsZSBhbmQgJGltYWdlQmFzZTY0LgoKU3VwcG9ydGVkIGJ5IHRoZSBmb2xsb3dpbmcgbW9kdWxlczoKCi0gUVJJbWFnZTogICByZXNvdXJjZSAoUEhQIDwgOCksIEdkSW1hZ2UKLSBRUkltYWdpY2s6IEltYWdpY2sKLSBRUkZwZGY6ICAgIEZQREYiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxPdXRwdXRcUVJPdXRwdXRJbnRlcmZhY2U6OmR1bXAoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6ImR1bXAiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6MTtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xCb29sZWFuIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3NTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6NToiZmFsc2UiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNzM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e319czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokaW1hZ2VCYXNlNjQiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDc6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JGltYWdlQmFzZTY0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6ImltYWdlQmFzZTY0Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMxOiJ0b2dnbGUgYmFzZTY0IG9yIHJhdyBpbWFnZSBkYXRhIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTc1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQ6InRydWUiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNzg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e319czo1MjoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokaW1hZ2VUcmFuc3BhcmVudCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MjoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokaW1hZ2VUcmFuc3BhcmVudCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE2OiJpbWFnZVRyYW5zcGFyZW50Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQxOiJ0b2dnbGUgdHJhbnNwYXJlbmN5LCBub3Qgc3VwcG9ydGVkIGJ5IGpwZyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE4MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0OiJ0cnVlIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTgzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xCb29sZWFuIjowOnt9fXM6NTU6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JGltYWdlVHJhbnNwYXJlbmN5QkciO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTU6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JGltYWdlVHJhbnNwYXJlbmN5QkciO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxOToiaW1hZ2VUcmFuc3BhcmVuY3lCRyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbiI6MTp7czo2MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbgBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQyOiJcY2hpbGxlcmxhblxRUkNvZGVcaW1hZ2Vjb2xvcnRyYW5zcGFyZW50KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMToiaW1hZ2Vjb2xvcnRyYW5zcGFyZW50Ijt9fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjk6IltSLCBHLCBCXSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTg1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjE1OiJbMjU1LCAyNTUsIDI1NV0iO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxOTA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fXM6NTA6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JHBuZ0NvbXByZXNzaW9uIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUwOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRwbmdDb21wcmVzc2lvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJwbmdDb21wcmVzc2lvbiI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbiI6MTp7czo2MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxGcXNlbgBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI5OiJcY2hpbGxlcmxhblxRUkNvZGVcaW1hZ2VwbmcoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6ImltYWdlcG5nIjt9fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE5MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoyOiItMSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE5NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQ3OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRqcGVnUXVhbGl0eSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6ODp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokanBlZ1F1YWxpdHkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToianBlZ1F1YWxpdHkiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjU0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4iOjE6e3M6NjE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozMDoiXGNoaWxsZXJsYW5cUVJDb2RlXGltYWdlanBlZygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiaW1hZ2VqcGVnIjt9fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE5NztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoyOiI4NSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIwMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRpbWFnaWNrRm9ybWF0IjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ5OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRpbWFnaWNrRm9ybWF0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTM6ImltYWdpY2tGb3JtYXQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjE6IkltYWdpY2sgb3V0cHV0IGZvcm1hdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MTk6IlxJbWFnaWNrOjpzZXRUeXBlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJzZXRUeXBlIjt9fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIwMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo1OiIncG5nJyI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIwNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX1zOjQ1OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRpbWFnaWNrQkciO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDU6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6JGltYWdpY2tCRyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6ImltYWdpY2tCRyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1MjoiSW1hZ2ljayBiYWNrZ3JvdW5kIGNvbG9yIChkZWZhdWx0cyB0byAidHJhbnNwYXJlbnQiKSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjg6IlxJbWFnaWNrUGl4ZWw6Ol9fY29uc3RydWN0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToiX19jb25zdHJ1Y3QiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjA5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQ6Im51bGwiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMTQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE51bGxhYmxlIjoxOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE51bGxhYmxlAHJlYWxUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX19czo1MToiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokZnBkZk1lYXN1cmVVbml0IjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUxOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRmcGRmTWVhc3VyZVVuaXQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToiZnBkZk1lYXN1cmVVbml0Ijt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjY3OiJNZWFzdXJlbWVudCB1bml0IGZvciBGUERGIG91dHB1dDogcHQsIG1tLCBjbSwgaW4gKGRlZmF1bHRzIHRvICJwdCIpIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQyOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xTZWUiOjM6e3M6NzoiACoAbmFtZSI7czozOiJzZWUiO3M6OToiACoAcmVmZXJzIjtPOjU0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4iOjE6e3M6NjE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcRnFzZW4AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyMDoiXEZQREY6Ol9fY29uc3RydWN0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToiX19jb25zdHJ1Y3QiO319czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjE2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjQ6IidwdCciO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMjE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e319czo0ODoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjokbW9kdWxlVmFsdWVzIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5Ijo4OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OiRtb2R1bGVWYWx1ZXMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMjoibW9kdWxlVmFsdWVzIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjE3OiJNb2R1bGUgdmFsdWVzIG1hcCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo4NjoiLSBIVE1MLCBJTUFHSUNLOiAjQUJDREVGLCBjc3NuYW1lLCByZ2IoKSwgcmdiYSgpLi4uCi0gSU1BR0U6IFs2MywgMTI3LCAyNTVdIC8vIFIsIEcsIEIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIyMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0OiJudWxsIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjI5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xOdWxsYWJsZSI6MTp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xOdWxsYWJsZQByZWFsVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAG1ldGhvZHMiO2E6ODp7czo1MzoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjpzZXRNaW5NYXhWZXJzaW9uKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjI4OiJjbGFtcCBtaW4vbWF4IHZlcnNpb24gbnVtYmVyIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjMxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUzOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OnNldE1pbk1heFZlcnNpb24oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE2OiJzZXRNaW5NYXhWZXJzaW9uIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjEwOiJ2ZXJzaW9uTWluIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjEwOiJ2ZXJzaW9uTWF4IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIzNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6c2V0X3ZlcnNpb25NaW4oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzE6InNldHMgdGhlIG1pbmltdW0gdmVyc2lvbiBudW1iZXIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3NTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNDI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6c2V0X3ZlcnNpb25NaW4oKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJzZXRfdmVyc2lvbk1pbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJ2ZXJzaW9uIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI0NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6c2V0X3ZlcnNpb25NYXgoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzE6InNldHMgdGhlIG1heGltdW0gdmVyc2lvbiBudW1iZXIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3NTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNDk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6c2V0X3ZlcnNpb25NYXgoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE0OiJzZXRfdmVyc2lvbk1heCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJ2ZXJzaW9uIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI1MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fXM6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6c2V0X2VjY0xldmVsKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjMxOiJzZXRzIHRoZSBlcnJvciBjb3JyZWN0aW9uIGxldmVsIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xUaHJvd3MiOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM0OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJDb2RlRXhjZXB0aW9uIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6IlFSQ29kZUV4Y2VwdGlvbiI7fX1zOjc6IgAqAG5hbWUiO3M6NjoidGhyb3dzIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI1NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjpzZXRfZWNjTGV2ZWwoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJzZXRfZWNjTGV2ZWwiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6ODoiZWNjTGV2ZWwiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjYxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo1MjoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjpzZXRfbWFza1BhdHRlcm4oKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjg6InNldHMvY2xhbXBzIHRoZSBtYXNrIHBhdHRlcm4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3NTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNzA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTI6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6c2V0X21hc2tQYXR0ZXJuKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToic2V0X21hc2tQYXR0ZXJuIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjExOiJtYXNrUGF0dGVybiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNzM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjYwOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OnNldF9pbWFnZVRyYW5zcGFyZW5jeUJHKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjM4OiJzZXRzIHRoZSB0cmFuc3BhcmVuY3kgYmFja2dyb3VuZCBjb2xvciI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVGhyb3dzIjozOntzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNDoiXGNoaWxsZXJsYW5cUVJDb2RlXFFSQ29kZUV4Y2VwdGlvbiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJRUkNvZGVFeGNlcHRpb24iO319czo3OiIAKgBuYW1lIjtzOjY6InRocm93cyI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3NTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyODE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjA6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdDo6c2V0X2ltYWdlVHJhbnNwYXJlbmN5QkcoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIzOiJzZXRfaW1hZ2VUcmFuc3BhcmVuY3lCRyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czoxOToiaW1hZ2VUcmFuc3BhcmVuY3lCRyI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjg2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo0ODoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjpzZXRfdmVyc2lvbigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozMDoic2V0cy9jbGFtcHMgdGhlIHZlcnNpb24gbnVtYmVyIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzU7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzE0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OnNldF92ZXJzaW9uKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToic2V0X3ZlcnNpb24iO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhcmd1bWVudHMiO2E6MTp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NzoidmVyc2lvbiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMTc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fX1zOjU2OiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQ6OnNldF9mcGRmTWVhc3VyZVVuaXQoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjk6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzA6InNldHMgdGhlIEZQREYgbWVhc3VyZW1lbnQgdW5pdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjE4OiJjb2RlQ292ZXJhZ2VJZ25vcmUiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc1O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMyNTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1NjoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9uc1RyYWl0OjpzZXRfZnBkZk1lYXN1cmVVbml0KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxOToic2V0X2ZwZGZNZWFzdXJlVW5pdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJ1bml0IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMzMDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fX0=";
\ No newline at end of file
diff --git a/files/X/J/sVBoHyeKZYMcKqcUooWw b/files/X/J/sVBoHyeKZYMcKqcUooWw
deleted file mode 100644
index 039981a7f..000000000
--- a/files/X/J/sVBoHyeKZYMcKqcUooWw
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Af59b8ac8a723058061167f1458eba522-686db30a4277633da5a475b5834ba241
-s:27176:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTU6IkNsYXNzIEthbmppVGVzdCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMzoiS2FuamlUZXN0LnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjI0LjExLjIwMTciO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI2OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNyBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiNjg2ZGIzMGE0Mjc3NjMzZGE1YTQ3NWI1ODM0YmEyNDEiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxMzoiS2FuamlUZXN0LnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjI0OiJ0ZXN0cy9EYXRhL0thbmppVGVzdC5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjE4MzQ6Ijw/cGhwCi8qKgogKiBDbGFzcyBLYW5qaVRlc3QKICoKICogQGZpbGVzb3VyY2UgICBLYW5qaVRlc3QucGhwCiAqIEBjcmVhdGVkICAgICAgMjQuMTEuMjAxNwogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhCiAqIEBhdXRob3IgICAgICAgU21pbGV5IDxzbWlsZXlAY2hpbGxlcmxhbi5uZXQ+CiAqIEBjb3B5cmlnaHQgICAgMjAxNyBTbWlsZXkKICogQGxpY2Vuc2UgICAgICBNSVQKICovCgpuYW1lc3BhY2UgY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGE7Cgp1c2UgY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zOwp1c2UgY2hpbGxlcmxhblxRUkNvZGVcRGF0YVx7S2FuamksIFFSQ29kZURhdGFFeGNlcHRpb24sIFFSRGF0YUludGVyZmFjZX07CgovKioKICogVGVzdHMgdGhlIEthbmppIGNsYXNzCiAqLwpmaW5hbCBjbGFzcyBLYW5qaVRlc3QgZXh0ZW5kcyBEYXRhaW50ZXJmYWNlVGVzdEFic3RyYWN0ewoKCS8qKiBAaW50ZXJuYWwgKi8KCXByb3RlY3RlZCBzdHJpbmcgJHRlc3RkYXRhID0gJ+iMl+iNt+iMl+iNt+iMl+iNt+iMl+iNt+iMl+iNtyc7CgoJLyoqIEBpbnRlcm5hbCAqLwoJcHJvdGVjdGVkIGFycmF5ICAkZXhwZWN0ZWQgPSBbCgkJMTI4LCAxNzMsIDg1LCAyNiwgOTUsIDg1LCA3MCwgMTUxLAoJCTIxMywgODEsIDE2NSwgMjQ1LCA4NCwgMTA1LCAxMjUsIDg1LAoJCTI2LCA5MiwgMCwgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwKCQkxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwKCQkxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LCAxNywgMjM2LAoJCTE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsIDE3LCAyMzYsCgkJMTk1LCAxMSwgMjIxLCA5MSwgMTQxLCAyMjAsIDE2MywgNDYsCgkJMTY1LCAzNywgMTYzLCAxNzYsIDc5LCAwLCA2NCwgNjgsCgkJOTYsIDExMywgNTQsIDE5MQoJXTsKCgkvKioKCSAqIEBpbmhlcml0RG9jCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERhdGFJbnRlcmZhY2VJbnN0YW5jZShRUk9wdGlvbnMgJG9wdGlvbnMpOlFSRGF0YUludGVyZmFjZXsKCQlyZXR1cm4gbmV3IEthbmppKCRvcHRpb25zKTsKCX0KCgkvKioKCSAqIFRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhbiBpbnZhbGlkIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZAoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdElsbGVnYWxDaGFyRXhjZXB0aW9uMSgpOnZvaWR7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbihRUkNvZGVEYXRhRXhjZXB0aW9uOjpjbGFzcyk7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbk1lc3NhZ2UoJ2lsbGVnYWwgY2hhciBhdCAxIFsxNjE5MV0nKTsKCgkJJHRoaXMtPmRhdGFJbnRlcmZhY2UtPnNldERhdGEoJ8ODw4MnKTsKCX0KCgkvKioKCSAqIFRlc3RzIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhbiBpbnZhbGlkIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZAoJICovCglwdWJsaWMgZnVuY3Rpb24gdGVzdElsbGVnYWxDaGFyRXhjZXB0aW9uMigpOnZvaWR7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbihRUkNvZGVEYXRhRXhjZXB0aW9uOjpjbGFzcyk7CgkJJHRoaXMtPmV4cGVjdEV4Y2VwdGlvbk1lc3NhZ2UoJ2lsbGVnYWwgY2hhciBhdCAxJyk7CgoJCSR0aGlzLT5kYXRhSW50ZXJmYWNlLT5zZXREYXRhKCfDgycpOwoJfQoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjI3OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGEiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyNzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiRGF0YSI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjM3OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcS2FuamlUZXN0IjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTE6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM3OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcS2FuamlUZXN0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6OToiS2FuamlUZXN0Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoyMToiVGVzdHMgdGhlIEthbmppIGNsYXNzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjI2OiJjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YSI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6NDp7czo5OiJRUk9wdGlvbnMiO3M6Mjc6ImNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7czo1OiJLYW5qaSI7czoyODoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxLYW5qaSI7czoxOToiUVJDb2RlRGF0YUV4Y2VwdGlvbiI7czo0MjoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkNvZGVEYXRhRXhjZXB0aW9uIjtzOjE1OiJRUkRhdGFJbnRlcmZhY2UiO3M6Mzg6ImNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjoxO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MzoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXERhdGFpbnRlcmZhY2VUZXN0QWJzdHJhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNToiRGF0YWludGVyZmFjZVRlc3RBYnN0cmFjdCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YToyOntzOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcS2FuamlUZXN0OjokdGVzdGRhdGEiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxLYW5qaVRlc3Q6OiR0ZXN0ZGF0YSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6InRlc3RkYXRhIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czozMjoiJ+iMl+iNt+iMl+iNt+iMl+iNt+iMl+iNt+iMl+iNtyciO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fX1zOjQ4OiJcY2hpbGxlcmxhblxRUkNvZGVUZXN0XERhdGFcS2FuamlUZXN0OjokZXhwZWN0ZWQiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjg6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDg6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxLYW5qaVRlc3Q6OiRleHBlY3RlZCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6ImV4cGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo0NDc6IlsxMjgsIDE3MywgODUsIDI2LCA5NSwgODUsIDcwLCAxNTEsIDIxMywgODEsIDE2NSwgMjQ1LCA4NCwgMTA1LCAxMjUsIDg1LCAyNiwgOTIsIDAsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTcsIDIzNiwgMTk1LCAxMSwgMjIxLCA5MSwgMTQxLCAyMjAsIDE2MywgNDYsIDE2NSwgMzcsIDE2MywgMTc2LCA3OSwgMCwgNjQsIDY4LCA5NiwgMTEzLCA1NCwgMTkxXSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6Mzp7czo2NToiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXEthbmppVGVzdDo6Z2V0RGF0YUludGVyZmFjZUluc3RhbmNlKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJpbmhlcml0RG9jIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo4OiJpbnRlcm5hbCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjU6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxLYW5qaVRlc3Q6OmdldERhdGFJbnRlcmZhY2VJbnN0YW5jZSgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjQ6ImdldERhdGFJbnRlcmZhY2VJbnN0YW5jZSI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo3OiJvcHRpb25zIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjg6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJRUk9wdGlvbnMiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozOToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTU6IlFSRGF0YUludGVyZmFjZSI7fX19czo2NjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXEthbmppVGVzdDo6dGVzdElsbGVnYWxDaGFyRXhjZXB0aW9uMSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo3MjoiVGVzdHMgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIGFuIGludmFsaWQgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjY6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxLYW5qaVRlc3Q6OnRlc3RJbGxlZ2FsQ2hhckV4Y2VwdGlvbjEoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI1OiJ0ZXN0SWxsZWdhbENoYXJFeGNlcHRpb24xIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319czo2NjoiXGNoaWxsZXJsYW5cUVJDb2RlVGVzdFxEYXRhXEthbmppVGVzdDo6dGVzdElsbGVnYWxDaGFyRXhjZXB0aW9uMigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo3MjoiVGVzdHMgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIGFuIGludmFsaWQgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NjE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjY6IlxjaGlsbGVybGFuXFFSQ29kZVRlc3RcRGF0YVxLYW5qaVRlc3Q6OnRlc3RJbGxlZ2FsQ2hhckV4Y2VwdGlvbjIoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI1OiJ0ZXN0SWxsZWdhbENoYXJFeGNlcHRpb24yIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjY0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e319fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9fQ==";
\ No newline at end of file
diff --git a/files/Y/6/Mw+CGbkB7tfHmBLyTBdA b/files/Y/6/Mw+CGbkB7tfHmBLyTBdA
deleted file mode 100644
index a3e241226..000000000
--- a/files/Y/6/Mw+CGbkB7tfHmBLyTBdA
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3Ad8b72682d00611500144fd349e7e2b22-a3579531f65919ac15172dd9862ce73c
-s:30664:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTU6IkNsYXNzIFFST3B0aW9ucyI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo2OntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjEwOiJmaWxlc291cmNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMzoiUVJPcHRpb25zLnBocCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoiY3JlYXRlZCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTA6IjA4LjEyLjIwMTUiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6InBhY2thZ2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjE3OiJjaGlsbGVybGFuXFFSQ29kZSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNSBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiYTM1Nzk1MzFmNjU5MTlhYzE1MTcyZGQ5ODYyY2U3M2MiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxMzoiUVJPcHRpb25zLnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjE3OiJzcmMvUVJPcHRpb25zLnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6MTYwNjoiPD9waHAKLyoqCiAqIENsYXNzIFFST3B0aW9ucwogKgogKiBAZmlsZXNvdXJjZSAgIFFST3B0aW9ucy5waHAKICogQGNyZWF0ZWQgICAgICAwOC4xMi4yMDE1CiAqIEBwYWNrYWdlICAgICAgY2hpbGxlcmxhblxRUkNvZGUKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZTsKCnVzZSBjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVyQWJzdHJhY3Q7CgovKioKICogVGhlIFFSQ29kZSBzZXR0aW5ncyBjb250YWluZXIKICoKICogQHByb3BlcnR5IGludCAgICAgICAgICR2ZXJzaW9uCiAqIEBwcm9wZXJ0eSBpbnQgICAgICAgICAkdmVyc2lvbk1pbgogKiBAcHJvcGVydHkgaW50ICAgICAgICAgJHZlcnNpb25NYXgKICogQHByb3BlcnR5IGludCAgICAgICAgICRlY2NMZXZlbAogKiBAcHJvcGVydHkgaW50ICAgICAgICAgJG1hc2tQYXR0ZXJuCiAqIEBwcm9wZXJ0eSBib29sICAgICAgICAkYWRkUXVpZXR6b25lCiAqIEBwcm9wZXJ0eSBpbnQgICAgICAgICAkcXVpZXR6b25lU2l6ZQogKiBAcHJvcGVydHkgc3RyaW5nfG51bGwgJGRhdGFNb2RlT3ZlcnJpZGUKICogQHByb3BlcnR5IHN0cmluZyAgICAgICRvdXRwdXRUeXBlCiAqIEBwcm9wZXJ0eSBzdHJpbmd8bnVsbCAkb3V0cHV0SW50ZXJmYWNlCiAqIEBwcm9wZXJ0eSBzdHJpbmd8bnVsbCAkY2FjaGVmaWxlCiAqIEBwcm9wZXJ0eSBzdHJpbmcgICAgICAkZW9sCiAqIEBwcm9wZXJ0eSBpbnQgICAgICAgICAkc2NhbGUKICogQHByb3BlcnR5IHN0cmluZyAgICAgICRjc3NDbGFzcwogKiBAcHJvcGVydHkgZmxvYXQgICAgICAgJHN2Z09wYWNpdHkKICogQHByb3BlcnR5IHN0cmluZyAgICAgICRzdmdEZWZzCiAqIEBwcm9wZXJ0eSBpbnQgICAgICAgICAkc3ZnVmlld0JveFNpemUKICogQHByb3BlcnR5IHN0cmluZyAgICAgICR0ZXh0RGFyawogKiBAcHJvcGVydHkgc3RyaW5nICAgICAgJHRleHRMaWdodAogKiBAcHJvcGVydHkgc3RyaW5nICAgICAgJG1hcmt1cERhcmsKICogQHByb3BlcnR5IHN0cmluZyAgICAgICRtYXJrdXBMaWdodAogKiBAcHJvcGVydHkgYm9vbCAgICAgICAgJHJldHVyblJlc291cmNlCiAqIEBwcm9wZXJ0eSBib29sICAgICAgICAkaW1hZ2VCYXNlNjQKICogQHByb3BlcnR5IGJvb2wgICAgICAgICRpbWFnZVRyYW5zcGFyZW50CiAqIEBwcm9wZXJ0eSBhcnJheSAgICAgICAkaW1hZ2VUcmFuc3BhcmVuY3lCRwogKiBAcHJvcGVydHkgaW50ICAgICAgICAgJHBuZ0NvbXByZXNzaW9uCiAqIEBwcm9wZXJ0eSBpbnQgICAgICAgICAkanBlZ1F1YWxpdHkKICogQHByb3BlcnR5IHN0cmluZyAgICAgICRpbWFnaWNrRm9ybWF0CiAqIEBwcm9wZXJ0eSBzdHJpbmd8bnVsbCAkaW1hZ2lja0JHCiAqIEBwcm9wZXJ0eSBzdHJpbmcgICAgICAkZnBkZk1lYXN1cmVVbml0CiAqIEBwcm9wZXJ0eSBhcnJheXxudWxsICAkbW9kdWxlVmFsdWVzCiAqLwpjbGFzcyBRUk9wdGlvbnMgZXh0ZW5kcyBTZXR0aW5nc0NvbnRhaW5lckFic3RyYWN0ewoJdXNlIFFST3B0aW9uc1RyYWl0Owp9CiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6MTg6IlxjaGlsbGVybGFuXFFSQ29kZSI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjE4OiJcY2hpbGxlcmxhblxRUkNvZGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJRUkNvZGUiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czoyODoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18iOjExOntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyODoiXGNoaWxsZXJsYW5cUVJDb2RlXFFST3B0aW9ucyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6IlFST3B0aW9ucyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6Mjk6IlRoZSBRUkNvZGUgc2V0dGluZ3MgY29udGFpbmVyIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjMxOntpOjA7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czo3OiJ2ZXJzaW9uIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czoxMDoidmVyc2lvbk1pbiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czo4OiJwcm9wZXJ0eSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFByb3BlcnR5Ijo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MTA6InZlcnNpb25NYXgiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQcm9wZXJ0eSI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjg6ImVjY0xldmVsIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjQ7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czoxMToibWFza1BhdHRlcm4iO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NTtPOjQ3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQcm9wZXJ0eSI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjEyOiJhZGRRdWlldHpvbmUiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NjtPOjQ3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQcm9wZXJ0eSI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjEzOiJxdWlldHpvbmVTaXplIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjc7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czoxNjoiZGF0YU1vZGVPdmVycmlkZSI7czo3OiIAKgB0eXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xOdWxsXyI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6ODtPOjQ3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQcm9wZXJ0eSI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjEwOiJvdXRwdXRUeXBlIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjk7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czoxNToib3V0cHV0SW50ZXJmYWNlIjtzOjc6IgAqAHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE51bGxfIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fXM6NzoiACoAbmFtZSI7czo4OiJwcm9wZXJ0eSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxMDtPOjQ3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQcm9wZXJ0eSI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjk6ImNhY2hlZmlsZSI7czo3OiIAKgB0eXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xOdWxsXyI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTE7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czozOiJlb2wiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTI7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czo1OiJzY2FsZSI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czo4OiJwcm9wZXJ0eSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxMztPOjQ3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQcm9wZXJ0eSI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjg6ImNzc0NsYXNzIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE0O086NDc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFByb3BlcnR5Ijo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MTA6InN2Z09wYWNpdHkiO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEZsb2F0XyI6MDp7fXM6NzoiACoAbmFtZSI7czo4OiJwcm9wZXJ0eSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxNTtPOjQ3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQcm9wZXJ0eSI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjc6InN2Z0RlZnMiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTY7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czoxNDoic3ZnVmlld0JveFNpemUiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTc7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czo4OiJ0ZXh0RGFyayI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NzoiACoAbmFtZSI7czo4OiJwcm9wZXJ0eSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxODtPOjQ3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQcm9wZXJ0eSI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjk6InRleHRMaWdodCI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NzoiACoAbmFtZSI7czo4OiJwcm9wZXJ0eSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxOTtPOjQ3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQcm9wZXJ0eSI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjEwOiJtYXJrdXBEYXJrIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjIwO086NDc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFByb3BlcnR5Ijo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MTE6Im1hcmt1cExpZ2h0IjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjIxO086NDc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFByb3BlcnR5Ijo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MTQ6InJldHVyblJlc291cmNlIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xCb29sZWFuIjowOnt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjIyO086NDc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFByb3BlcnR5Ijo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MTE6ImltYWdlQmFzZTY0IjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xCb29sZWFuIjowOnt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjIzO086NDc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFByb3BlcnR5Ijo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MTY6ImltYWdlVHJhbnNwYXJlbnQiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjQ7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czoxOToiaW1hZ2VUcmFuc3BhcmVuY3lCRyI7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjU7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czoxNDoicG5nQ29tcHJlc3Npb24iO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjY7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czoxMToianBlZ1F1YWxpdHkiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6Mjc7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czoxMzoiaW1hZ2lja0Zvcm1hdCI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NzoiACoAbmFtZSI7czo4OiJwcm9wZXJ0eSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyODtPOjQ3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQcm9wZXJ0eSI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjk6ImltYWdpY2tCRyI7czo3OiIAKgB0eXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xOdWxsXyI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO31zOjc6IgAqAG5hbWUiO3M6ODoicHJvcGVydHkiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6Mjk7Tzo0NzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUHJvcGVydHkiOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czoxNToiZnBkZk1lYXN1cmVVbml0IjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjMwO086NDc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFByb3BlcnR5Ijo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MTI6Im1vZHVsZVZhbHVlcyI7czo3OiIAKgB0eXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fWk6MTtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTnVsbF8iOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9czo3OiIAKgBuYW1lIjtzOjg6InByb3BlcnR5IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoxNzoiY2hpbGxlcmxhblxRUkNvZGUiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjE6e3M6MjU6IlNldHRpbmdzQ29udGFpbmVyQWJzdHJhY3QiO3M6NDU6ImNoaWxsZXJsYW5cU2V0dGluZ3NcU2V0dGluZ3NDb250YWluZXJBYnN0cmFjdCI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcGFyZW50IjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDY6IlxjaGlsbGVybGFuXFNldHRpbmdzXFNldHRpbmdzQ29udGFpbmVyQWJzdHJhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNToiU2V0dGluZ3NDb250YWluZXJBYnN0cmFjdCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjE6e3M6MzM6IlxjaGlsbGVybGFuXFFSQ29kZVxRUk9wdGlvbnNUcmFpdCI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMzOiJcY2hpbGxlcmxhblxRUkNvZGVcUVJPcHRpb25zVHJhaXQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNDoiUVJPcHRpb25zVHJhaXQiO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fX0=";
\ No newline at end of file
diff --git a/files/Z/A/ceCaotasOUz8I1ZGmVOg b/files/Z/A/ceCaotasOUz8I1ZGmVOg
deleted file mode 100644
index 228846bc5..000000000
--- a/files/Z/A/ceCaotasOUz8I1ZGmVOg
+++ /dev/null
@@ -1,3 +0,0 @@
-1668785499
-AwuilbDvXz%3A726e195427c9d19fd16b85863921fb3d-7a01fa2d74aa3ba6ece6214d6f8d689d
-s:60508:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxMjp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MjU6IkludGVyZmFjZSBRUkRhdGFJbnRlcmZhY2UiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Njp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czoxMDoiZmlsZXNvdXJjZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTk6IlFSRGF0YUludGVyZmFjZS5waHAiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImNyZWF0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjEwOiIwMS4xMi4yMDE1IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyMjoiY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IiOjQ6e3M6NzoiACoAbmFtZSI7czo2OiJhdXRob3IiO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yTmFtZSI7czo2OiJTbWlsZXkiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MjE6InNtaWxleUBjaGlsbGVybGFuLm5ldCI7czoxNDoiACoAZGVzY3JpcHRpb24iO047fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6OToiY29weXJpZ2h0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMToiMjAxNSBTbWlsZXkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjU7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjc6ImxpY2Vuc2UiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM6Ik1JVCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiN2EwMWZhMmQ3NGFhM2JhNmVjZTYyMTRkNmY4ZDY4OWQiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZSI7czoxOToiUVJEYXRhSW50ZXJmYWNlLnBocCI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjI4OiJzcmMvRGF0YS9RUkRhdGFJbnRlcmZhY2UucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czoxMTkzMzoiPD9waHAKLyoqCiAqIEludGVyZmFjZSBRUkRhdGFJbnRlcmZhY2UKICoKICogQGZpbGVzb3VyY2UgICBRUkRhdGFJbnRlcmZhY2UucGhwCiAqIEBjcmVhdGVkICAgICAgMDEuMTIuMjAxNQogKiBAcGFja2FnZSAgICAgIGNoaWxsZXJsYW5cUVJDb2RlXERhdGEKICogQGF1dGhvciAgICAgICBTbWlsZXkgPHNtaWxleUBjaGlsbGVybGFuLm5ldD4KICogQGNvcHlyaWdodCAgICAyMDE1IFNtaWxleQogKiBAbGljZW5zZSAgICAgIE1JVAogKi8KCm5hbWVzcGFjZSBjaGlsbGVybGFuXFFSQ29kZVxEYXRhOwoKLyoqCiAqIFNwZWNpZmllcyB0aGUgbWV0aG9kcyByZXFpcmVkIGZvciB0aGUgZGF0YSBtb2R1bGVzIChOdW1iZXIsIEFscGhhbnVtLCBCeXRlIGFuZCBLYW5qaSkKICogYW5kIGhvbGRzIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gc2V2ZXJhbCBjb25zdGFudHMKICovCmludGVyZmFjZSBRUkRhdGFJbnRlcmZhY2V7CgoJLyoqCgkgKiBAdmFyIGludFtdCgkgKi8KCWNvbnN0IENIQVJfTUFQX05VTUJFUiA9IFsKCQknMCcgPT4gMCwgJzEnID0+IDEsICcyJyA9PiAyLCAnMycgPT4gMywgJzQnID0+IDQsICc1JyA9PiA1LCAnNicgPT4gNiwgJzcnID0+IDcsICc4JyA9PiA4LCAnOScgPT4gOSwKCV07CgoJLyoqCgkgKiBJU08vSUVDIDE4MDA0OjIwMDAgVGFibGUgNQoJICoKCSAqIEB2YXIgaW50W10KCSAqLwoJY29uc3QgQ0hBUl9NQVBfQUxQSEFOVU0gPSBbCgkJJzAnID0+ICAwLCAnMScgPT4gIDEsICcyJyA9PiAgMiwgJzMnID0+ICAzLCAnNCcgPT4gIDQsICc1JyA9PiAgNSwgJzYnID0+ICA2LCAnNycgPT4gIDcsCgkJJzgnID0+ICA4LCAnOScgPT4gIDksICdBJyA9PiAxMCwgJ0InID0+IDExLCAnQycgPT4gMTIsICdEJyA9PiAxMywgJ0UnID0+IDE0LCAnRicgPT4gMTUsCgkJJ0cnID0+IDE2LCAnSCcgPT4gMTcsICdJJyA9PiAxOCwgJ0onID0+IDE5LCAnSycgPT4gMjAsICdMJyA9PiAyMSwgJ00nID0+IDIyLCAnTicgPT4gMjMsCgkJJ08nID0+IDI0LCAnUCcgPT4gMjUsICdRJyA9PiAyNiwgJ1InID0+IDI3LCAnUycgPT4gMjgsICdUJyA9PiAyOSwgJ1UnID0+IDMwLCAnVicgPT4gMzEsCgkJJ1cnID0+IDMyLCAnWCcgPT4gMzMsICdZJyA9PiAzNCwgJ1onID0+IDM1LCAnICcgPT4gMzYsICckJyA9PiAzNywgJyUnID0+IDM4LCAnKicgPT4gMzksCgkJJysnID0+IDQwLCAnLScgPT4gNDEsICcuJyA9PiA0MiwgJy8nID0+IDQzLCAnOicgPT4gNDQsCgldOwoKCS8qKgoJICogSVNPL0lFQyAxODAwNDoyMDAwIFRhYmxlcyA3LTExIC0gTnVtYmVyIG9mIHN5bWJvbCBjaGFyYWN0ZXJzIGFuZCBpbnB1dCBkYXRhIGNhcGFjaXR5IGZvciB2ZXJzaW9ucyAxIHRvIDQwCgkgKgoJICogQHNlZSBodHRwOi8vd3d3LnFyY29kZS5jb20vZW4vYWJvdXQvdmVyc2lvbi5odG1sCgkgKgoJICogQHZhciBpbnQgW11bXVtdCgkgKi8KCWNvbnN0IE1BWF9MRU5HVEggPVsKCS8vCXYgID0+IFtOVU1FUklDID0+IFtMLCBNLCBRLCBIIF0sIEFMUEhBTlVNID0+IFtMLCBNLCBRLCBIXSwgQklOQVJZID0+IFtMLCBNLCBRLCBIICBdLCBLQU5KSSA9PiBbTCwgTSwgUSwgSCAgIF1dICAvLyBtb2R1bGVzCgkJMSAgPT4gW1sgIDQxLCAgIDM0LCAgIDI3LCAgIDE3XSwgWyAgMjUsICAgMjAsICAgMTYsICAgMTBdLCBbICAxNywgICAxNCwgICAxMSwgICAgN10sIFsgIDEwLCAgICA4LCAgICA3LCAgICA0XV0sIC8vICAyMQoJCTIgID0+IFtbICA3NywgICA2MywgICA0OCwgICAzNF0sIFsgIDQ3LCAgIDM4LCAgIDI5LCAgIDIwXSwgWyAgMzIsICAgMjYsICAgMjAsICAgMTRdLCBbICAyMCwgICAxNiwgICAxMiwgICAgOF1dLCAvLyAgMjUKCQkzICA9PiBbWyAxMjcsICAxMDEsICAgNzcsICAgNThdLCBbICA3NywgICA2MSwgICA0NywgICAzNV0sIFsgIDUzLCAgIDQyLCAgIDMyLCAgIDI0XSwgWyAgMzIsICAgMjYsICAgMjAsICAgMTVdXSwgLy8gIDI5CgkJNCAgPT4gW1sgMTg3LCAgMTQ5LCAgMTExLCAgIDgyXSwgWyAxMTQsICAgOTAsICAgNjcsICAgNTBdLCBbICA3OCwgICA2MiwgICA0NiwgICAzNF0sIFsgIDQ4LCAgIDM4LCAgIDI4LCAgIDIxXV0sIC8vICAzMwoJCTUgID0+IFtbIDI1NSwgIDIwMiwgIDE0NCwgIDEwNl0sIFsgMTU0LCAgMTIyLCAgIDg3LCAgIDY0XSwgWyAxMDYsICAgODQsICAgNjAsICAgNDRdLCBbICA2NSwgICA1MiwgICAzNywgICAyN11dLCAvLyAgMzcKCQk2ICA9PiBbWyAzMjIsICAyNTUsICAxNzgsICAxMzldLCBbIDE5NSwgIDE1NCwgIDEwOCwgICA4NF0sIFsgMTM0LCAgMTA2LCAgIDc0LCAgIDU4XSwgWyAgODIsICAgNjUsICAgNDUsICAgMzZdXSwgLy8gIDQxCgkJNyAgPT4gW1sgMzcwLCAgMjkzLCAgMjA3LCAgMTU0XSwgWyAyMjQsICAxNzgsICAxMjUsICAgOTNdLCBbIDE1NCwgIDEyMiwgICA4NiwgICA2NF0sIFsgIDk1LCAgIDc1LCAgIDUzLCAgIDM5XV0sIC8vICA0NQoJCTggID0+IFtbIDQ2MSwgIDM2NSwgIDI1OSwgIDIwMl0sIFsgMjc5LCAgMjIxLCAgMTU3LCAgMTIyXSwgWyAxOTIsICAxNTIsICAxMDgsICAgODRdLCBbIDExOCwgICA5MywgICA2NiwgICA1Ml1dLCAvLyAgNDkKCQk5ICA9PiBbWyA1NTIsICA0MzIsICAzMTIsICAyMzVdLCBbIDMzNSwgIDI2MiwgIDE4OSwgIDE0M10sIFsgMjMwLCAgMTgwLCAgMTMwLCAgIDk4XSwgWyAxNDEsICAxMTEsICAgODAsICAgNjBdXSwgLy8gIDUzCgkJMTAgPT4gW1sgNjUyLCAgNTEzLCAgMzY0LCAgMjg4XSwgWyAzOTUsICAzMTEsICAyMjEsICAxNzRdLCBbIDI3MSwgIDIxMywgIDE1MSwgIDExOV0sIFsgMTY3LCAgMTMxLCAgIDkzLCAgIDc0XV0sIC8vICA1NwoJCTExID0+IFtbIDc3MiwgIDYwNCwgIDQyNywgIDMzMV0sIFsgNDY4LCAgMzY2LCAgMjU5LCAgMjAwXSwgWyAzMjEsICAyNTEsICAxNzcsICAxMzddLCBbIDE5OCwgIDE1NSwgIDEwOSwgICA4NV1dLCAvLyAgNjEKCQkxMiA9PiBbWyA4ODMsICA2OTEsICA0ODksICAzNzRdLCBbIDUzNSwgIDQxOSwgIDI5NiwgIDIyN10sIFsgMzY3LCAgMjg3LCAgMjAzLCAgMTU1XSwgWyAyMjYsICAxNzcsICAxMjUsICAgOTZdXSwgLy8gIDY1CgkJMTMgPT4gW1sxMDIyLCAgNzk2LCAgNTgwLCAgNDI3XSwgWyA2MTksICA0ODMsICAzNTIsICAyNTldLCBbIDQyNSwgIDMzMSwgIDI0MSwgIDE3N10sIFsgMjYyLCAgMjA0LCAgMTQ5LCAgMTA5XV0sIC8vICA2OSBOSUNFIQoJCTE0ID0+IFtbMTEwMSwgIDg3MSwgIDYyMSwgIDQ2OF0sIFsgNjY3LCAgNTI4LCAgMzc2LCAgMjgzXSwgWyA0NTgsICAzNjIsICAyNTgsICAxOTRdLCBbIDI4MiwgIDIyMywgIDE1OSwgIDEyMF1dLCAvLyAgNzMKCQkxNSA9PiBbWzEyNTAsICA5OTEsICA3MDMsICA1MzBdLCBbIDc1OCwgIDYwMCwgIDQyNiwgIDMyMV0sIFsgNTIwLCAgNDEyLCAgMjkyLCAgMjIwXSwgWyAzMjAsICAyNTQsICAxODAsICAxMzZdXSwgLy8gIDc3CgkJMTYgPT4gW1sxNDA4LCAxMDgyLCAgNzc1LCAgNjAyXSwgWyA4NTQsICA2NTYsICA0NzAsICAzNjVdLCBbIDU4NiwgIDQ1MCwgIDMyMiwgIDI1MF0sIFsgMzYxLCAgMjc3LCAgMTk4LCAgMTU0XV0sIC8vICA4MQoJCTE3ID0+IFtbMTU0OCwgMTIxMiwgIDg3NiwgIDY3NF0sIFsgOTM4LCAgNzM0LCAgNTMxLCAgNDA4XSwgWyA2NDQsICA1MDQsICAzNjQsICAyODBdLCBbIDM5NywgIDMxMCwgIDIyNCwgIDE3M11dLCAvLyAgODUKCQkxOCA9PiBbWzE3MjUsIDEzNDYsICA5NDgsICA3NDZdLCBbMTA0NiwgIDgxNiwgIDU3NCwgIDQ1Ml0sIFsgNzE4LCAgNTYwLCAgMzk0LCAgMzEwXSwgWyA0NDIsICAzNDUsICAyNDMsICAxOTFdXSwgLy8gIDg5CgkJMTkgPT4gW1sxOTAzLCAxNTAwLCAxMDYzLCAgODEzXSwgWzExNTMsICA5MDksICA2NDQsICA0OTNdLCBbIDc5MiwgIDYyNCwgIDQ0MiwgIDMzOF0sIFsgNDg4LCAgMzg0LCAgMjcyLCAgMjA4XV0sIC8vICA5MwoJCTIwID0+IFtbMjA2MSwgMTYwMCwgMTE1OSwgIDkxOV0sIFsxMjQ5LCAgOTcwLCAgNzAyLCAgNTU3XSwgWyA4NTgsICA2NjYsICA0ODIsICAzODJdLCBbIDUyOCwgIDQxMCwgIDI5NywgIDIzNV1dLCAvLyAgOTcKCQkyMSA9PiBbWzIyMzIsIDE3MDgsIDEyMjQsICA5NjldLCBbMTM1MiwgMTAzNSwgIDc0MiwgIDU4N10sIFsgOTI5LCAgNzExLCAgNTA5LCAgNDAzXSwgWyA1NzIsICA0MzgsICAzMTQsICAyNDhdXSwgLy8gMTAxCgkJMjIgPT4gW1syNDA5LCAxODcyLCAxMzU4LCAxMDU2XSwgWzE0NjAsIDExMzQsICA4MjMsICA2NDBdLCBbMTAwMywgIDc3OSwgIDU2NSwgIDQzOV0sIFsgNjE4LCAgNDgwLCAgMzQ4LCAgMjcwXV0sIC8vIDEwNQoJCTIzID0+IFtbMjYyMCwgMjA1OSwgMTQ2OCwgMTEwOF0sIFsxNTg4LCAxMjQ4LCAgODkwLCAgNjcyXSwgWzEwOTEsICA4NTcsICA2MTEsICA0NjFdLCBbIDY3MiwgIDUyOCwgIDM3NiwgIDI4NF1dLCAvLyAxMDkKCQkyNCA9PiBbWzI4MTIsIDIxODgsIDE1ODgsIDEyMjhdLCBbMTcwNCwgMTMyNiwgIDk2MywgIDc0NF0sIFsxMTcxLCAgOTExLCAgNjYxLCAgNTExXSwgWyA3MjEsICA1NjEsICA0MDcsICAzMTVdXSwgLy8gMTEzCgkJMjUgPT4gW1szMDU3LCAyMzk1LCAxNzE4LCAxMjg2XSwgWzE4NTMsIDE0NTEsIDEwNDEsICA3NzldLCBbMTI3MywgIDk5NywgIDcxNSwgIDUzNV0sIFsgNzg0LCAgNjE0LCAgNDQwLCAgMzMwXV0sIC8vIDExNwoJCTI2ID0+IFtbMzI4MywgMjU0NCwgMTgwNCwgMTQyNV0sIFsxOTkwLCAxNTQyLCAxMDk0LCAgODY0XSwgWzEzNjcsIDEwNTksICA3NTEsICA1OTNdLCBbIDg0MiwgIDY1MiwgIDQ2MiwgIDM2NV1dLCAvLyAxMjEKCQkyNyA9PiBbWzM1MTcsIDI3MDEsIDE5MzMsIDE1MDFdLCBbMjEzMiwgMTYzNywgMTE3MiwgIDkxMF0sIFsxNDY1LCAxMTI1LCAgODA1LCAgNjI1XSwgWyA5MDIsICA2OTIsICA0OTYsICAzODVdXSwgLy8gMTI1CgkJMjggPT4gW1szNjY5LCAyODU3LCAyMDg1LCAxNTgxXSwgWzIyMjMsIDE3MzIsIDEyNjMsICA5NThdLCBbMTUyOCwgMTE5MCwgIDg2OCwgIDY1OF0sIFsgOTQwLCAgNzMyLCAgNTM0LCAgNDA1XV0sIC8vIDEyOQoJCTI5ID0+IFtbMzkwOSwgMzAzNSwgMjE4MSwgMTY3N10sIFsyMzY5LCAxODM5LCAxMzIyLCAxMDE2XSwgWzE2MjgsIDEyNjQsICA5MDgsICA2OThdLCBbMTAwMiwgIDc3OCwgIDU1OSwgIDQzMF1dLCAvLyAxMzMKCQkzMCA9PiBbWzQxNTgsIDMyODksIDIzNTgsIDE3ODJdLCBbMjUyMCwgMTk5NCwgMTQyOSwgMTA4MF0sIFsxNzMyLCAxMzcwLCAgOTgyLCAgNzQyXSwgWzEwNjYsICA4NDMsICA2MDQsICA0NTddXSwgLy8gMTM3CgkJMzEgPT4gW1s0NDE3LCAzNDg2LCAyNDczLCAxODk3XSwgWzI2NzcsIDIxMTMsIDE0OTksIDExNTBdLCBbMTg0MCwgMTQ1MiwgMTAzMCwgIDc5MF0sIFsxMTMyLCAgODk0LCAgNjM0LCAgNDg2XV0sIC8vIDE0MQoJCTMyID0+IFtbNDY4NiwgMzY5MywgMjY3MCwgMjAyMl0sIFsyODQwLCAyMjM4LCAxNjE4LCAxMjI2XSwgWzE5NTIsIDE1MzgsIDExMTIsICA4NDJdLCBbMTIwMSwgIDk0NywgIDY4NCwgIDUxOF1dLCAvLyAxNDUKCQkzMyA9PiBbWzQ5NjUsIDM5MDksIDI4MDUsIDIxNTddLCBbMzAwOSwgMjM2OSwgMTcwMCwgMTMwN10sIFsyMDY4LCAxNjI4LCAxMTY4LCAgODk4XSwgWzEyNzMsIDEwMDIsICA3MTksICA1NTNdXSwgLy8gMTQ5CgkJMzQgPT4gW1s1MjUzLCA0MTM0LCAyOTQ5LCAyMzAxXSwgWzMxODMsIDI1MDYsIDE3ODcsIDEzOTRdLCBbMjE4OCwgMTcyMiwgMTIyOCwgIDk1OF0sIFsxMzQ3LCAxMDYwLCAgNzU2LCAgNTkwXV0sIC8vIDE1MwoJCTM1ID0+IFtbNTUyOSwgNDM0MywgMzA4MSwgMjM2MV0sIFszMzUxLCAyNjMyLCAxODY3LCAxNDMxXSwgWzIzMDMsIDE4MDksIDEyODMsICA5ODNdLCBbMTQxNywgMTExMywgIDc5MCwgIDYwNV1dLCAvLyAxNTcKCQkzNiA9PiBbWzU4MzYsIDQ1ODgsIDMyNDQsIDI1MjRdLCBbMzUzNywgMjc4MCwgMTk2NiwgMTUzMF0sIFsyNDMxLCAxOTExLCAxMzUxLCAxMDUxXSwgWzE0OTYsIDExNzYsICA4MzIsICA2NDddXSwgLy8gMTYxCgkJMzcgPT4gW1s2MTUzLCA0Nzc1LCAzNDE3LCAyNjI1XSwgWzM3MjksIDI4OTQsIDIwNzEsIDE1OTFdLCBbMjU2MywgMTk4OSwgMTQyMywgMTA5M10sIFsxNTc3LCAxMjI0LCAgODc2LCAgNjczXV0sIC8vIDE2NQoJCTM4ID0+IFtbNjQ3OSwgNTAzOSwgMzU5OSwgMjczNV0sIFszOTI3LCAzMDU0LCAyMTgxLCAxNjU4XSwgWzI2OTksIDIwOTksIDE0OTksIDExMzldLCBbMTY2MSwgMTI5MiwgIDkyMywgIDcwMV1dLCAvLyAxNjkKCQkzOSA9PiBbWzY3NDMsIDUzMTMsIDM3OTEsIDI5MjddLCBbNDA4NywgMzIyMCwgMjI5OCwgMTc3NF0sIFsyODA5LCAyMjEzLCAxNTc5LCAxMjE5XSwgWzE3MjksIDEzNjIsICA5NzIsICA3NTBdXSwgLy8gMTczCgkJNDAgPT4gW1s3MDg5LCA1NTk2LCAzOTkzLCAzMDU3XSwgWzQyOTYsIDMzOTEsIDI0MjAsIDE4NTJdLCBbMjk1MywgMjMzMSwgMTY2MywgMTI3M10sIFsxODE3LCAxNDM1LCAxMDI0LCAgNzg0XV0sIC8vIDE3NwoJXTsKCgkvKioKCSAqIElTTy9JRUMgMTgwMDQ6MjAwMCBUYWJsZXMgNy0xMSAtIE51bWJlciBvZiBzeW1ib2wgY2hhcmFjdGVycyBhbmQgaW5wdXQgZGF0YSBjYXBhY2l0eSBmb3IgdmVyc2lvbnMgMSB0byA0MAoJICoKCSAqIEB2YXIgaW50IFtdW10KCSAqLwoJY29uc3QgTUFYX0JJVFMgPSBbCgkJLy8gdmVyc2lvbiA9PiBbTCwgTSwgUSwgSCBdCgkJMSAgPT4gWyAgMTUyLCAgIDEyOCwgICAxMDQsICAgIDcyXSwKCQkyICA9PiBbICAyNzIsICAgMjI0LCAgIDE3NiwgICAxMjhdLAoJCTMgID0+IFsgIDQ0MCwgICAzNTIsICAgMjcyLCAgIDIwOF0sCgkJNCAgPT4gWyAgNjQwLCAgIDUxMiwgICAzODQsICAgMjg4XSwKCQk1ICA9PiBbICA4NjQsICAgNjg4LCAgIDQ5NiwgICAzNjhdLAoJCTYgID0+IFsgMTA4OCwgICA4NjQsICAgNjA4LCAgIDQ4MF0sCgkJNyAgPT4gWyAxMjQ4LCAgIDk5MiwgICA3MDQsICAgNTI4XSwKCQk4ICA9PiBbIDE1NTIsICAxMjMyLCAgIDg4MCwgICA2ODhdLAoJCTkgID0+IFsgMTg1NiwgIDE0NTYsICAxMDU2LCAgIDgwMF0sCgkJMTAgPT4gWyAyMTkyLCAgMTcyOCwgIDEyMzIsICAgOTc2XSwKCQkxMSA9PiBbIDI1OTIsICAyMDMyLCAgMTQ0MCwgIDExMjBdLAoJCTEyID0+IFsgMjk2MCwgIDIzMjAsICAxNjQ4LCAgMTI2NF0sCgkJMTMgPT4gWyAzNDI0LCAgMjY3MiwgIDE5NTIsICAxNDQwXSwKCQkxNCA9PiBbIDM2ODgsICAyOTIwLCAgMjA4OCwgIDE1NzZdLAoJCTE1ID0+IFsgNDE4NCwgIDMzMjAsICAyMzYwLCAgMTc4NF0sCgkJMTYgPT4gWyA0NzEyLCAgMzYyNCwgIDI2MDAsICAyMDI0XSwKCQkxNyA9PiBbIDUxNzYsICA0MDU2LCAgMjkzNiwgIDIyNjRdLAoJCTE4ID0+IFsgNTc2OCwgIDQ1MDQsICAzMTc2LCAgMjUwNF0sCgkJMTkgPT4gWyA2MzYwLCAgNTAxNiwgIDM1NjAsICAyNzI4XSwKCQkyMCA9PiBbIDY4ODgsICA1MzUyLCAgMzg4MCwgIDMwODBdLAoJCTIxID0+IFsgNzQ1NiwgIDU3MTIsICA0MDk2LCAgMzI0OF0sCgkJMjIgPT4gWyA4MDQ4LCAgNjI1NiwgIDQ1NDQsICAzNTM2XSwKCQkyMyA9PiBbIDg3NTIsICA2ODgwLCAgNDkxMiwgIDM3MTJdLAoJCTI0ID0+IFsgOTM5MiwgIDczMTIsICA1MzEyLCAgNDExMl0sCgkJMjUgPT4gWzEwMjA4LCAgODAwMCwgIDU3NDQsICA0MzA0XSwKCQkyNiA9PiBbMTA5NjAsICA4NDk2LCAgNjAzMiwgIDQ3NjhdLAoJCTI3ID0+IFsxMTc0NCwgIDkwMjQsICA2NDY0LCAgNTAyNF0sCgkJMjggPT4gWzEyMjQ4LCAgOTU0NCwgIDY5NjgsICA1Mjg4XSwKCQkyOSA9PiBbMTMwNDgsIDEwMTM2LCAgNzI4OCwgIDU2MDhdLAoJCTMwID0+IFsxMzg4MCwgMTA5ODQsICA3ODgwLCAgNTk2MF0sCgkJMzEgPT4gWzE0NzQ0LCAxMTY0MCwgIDgyNjQsICA2MzQ0XSwKCQkzMiA9PiBbMTU2NDAsIDEyMzI4LCAgODkyMCwgIDY3NjBdLAoJCTMzID0+IFsxNjU2OCwgMTMwNDgsICA5MzY4LCAgNzIwOF0sCgkJMzQgPT4gWzE3NTI4LCAxMzgwMCwgIDk4NDgsICA3Njg4XSwKCQkzNSA9PiBbMTg0NDgsIDE0NDk2LCAxMDI4OCwgIDc4ODhdLAoJCTM2ID0+IFsxOTQ3MiwgMTUzMTIsIDEwODMyLCAgODQzMl0sCgkJMzcgPT4gWzIwNTI4LCAxNTkzNiwgMTE0MDgsICA4NzY4XSwKCQkzOCA9PiBbMjE2MTYsIDE2ODE2LCAxMjAxNiwgIDkxMzZdLAoJCTM5ID0+IFsyMjQ5NiwgMTc3MjgsIDEyNjU2LCAgOTc3Nl0sCgkJNDAgPT4gWzIzNjQ4LCAxODY3MiwgMTMzMjgsIDEwMjA4XSwKCV07CgoJLyoqCgkgKiBAc2VlIGh0dHA6Ly93d3cudGhvbmt5LmNvbS9xci1jb2RlLXR1dG9yaWFsL2Vycm9yLWNvcnJlY3Rpb24tdGFibGUKCSAqCgkgKiBAdmFyIGludCBbXVtdW10KCSAqLwoJY29uc3QgUlNCTE9DS1MgPSBbCgkJMSAgPT4gW1sgMSwgIDAsICAyNiwgIDE5XSwgWyAxLCAgMCwgMjYsIDE2XSwgWyAxLCAgMCwgMjYsIDEzXSwgWyAxLCAgMCwgMjYsICA5XV0sCgkJMiAgPT4gW1sgMSwgIDAsICA0NCwgIDM0XSwgWyAxLCAgMCwgNDQsIDI4XSwgWyAxLCAgMCwgNDQsIDIyXSwgWyAxLCAgMCwgNDQsIDE2XV0sCgkJMyAgPT4gW1sgMSwgIDAsICA3MCwgIDU1XSwgWyAxLCAgMCwgNzAsIDQ0XSwgWyAyLCAgMCwgMzUsIDE3XSwgWyAyLCAgMCwgMzUsIDEzXV0sCgkJNCAgPT4gW1sgMSwgIDAsIDEwMCwgIDgwXSwgWyAyLCAgMCwgNTAsIDMyXSwgWyAyLCAgMCwgNTAsIDI0XSwgWyA0LCAgMCwgMjUsICA5XV0sCgkJNSAgPT4gW1sgMSwgIDAsIDEzNCwgMTA4XSwgWyAyLCAgMCwgNjcsIDQzXSwgWyAyLCAgMiwgMzMsIDE1XSwgWyAyLCAgMiwgMzMsIDExXV0sCgkJNiAgPT4gW1sgMiwgIDAsICA4NiwgIDY4XSwgWyA0LCAgMCwgNDMsIDI3XSwgWyA0LCAgMCwgNDMsIDE5XSwgWyA0LCAgMCwgNDMsIDE1XV0sCgkJNyAgPT4gW1sgMiwgIDAsICA5OCwgIDc4XSwgWyA0LCAgMCwgNDksIDMxXSwgWyAyLCAgNCwgMzIsIDE0XSwgWyA0LCAgMSwgMzksIDEzXV0sCgkJOCAgPT4gW1sgMiwgIDAsIDEyMSwgIDk3XSwgWyAyLCAgMiwgNjAsIDM4XSwgWyA0LCAgMiwgNDAsIDE4XSwgWyA0LCAgMiwgNDAsIDE0XV0sCgkJOSAgPT4gW1sgMiwgIDAsIDE0NiwgMTE2XSwgWyAzLCAgMiwgNTgsIDM2XSwgWyA0LCAgNCwgMzYsIDE2XSwgWyA0LCAgNCwgMzYsIDEyXV0sCgkJMTAgPT4gW1sgMiwgIDIsICA4NiwgIDY4XSwgWyA0LCAgMSwgNjksIDQzXSwgWyA2LCAgMiwgNDMsIDE5XSwgWyA2LCAgMiwgNDMsIDE1XV0sCgkJMTEgPT4gW1sgNCwgIDAsIDEwMSwgIDgxXSwgWyAxLCAgNCwgODAsIDUwXSwgWyA0LCAgNCwgNTAsIDIyXSwgWyAzLCAgOCwgMzYsIDEyXV0sCgkJMTIgPT4gW1sgMiwgIDIsIDExNiwgIDkyXSwgWyA2LCAgMiwgNTgsIDM2XSwgWyA0LCAgNiwgNDYsIDIwXSwgWyA3LCAgNCwgNDIsIDE0XV0sCgkJMTMgPT4gW1sgNCwgIDAsIDEzMywgMTA3XSwgWyA4LCAgMSwgNTksIDM3XSwgWyA4LCAgNCwgNDQsIDIwXSwgWzEyLCAgNCwgMzMsIDExXV0sCgkJMTQgPT4gW1sgMywgIDEsIDE0NSwgMTE1XSwgWyA0LCAgNSwgNjQsIDQwXSwgWzExLCAgNSwgMzYsIDE2XSwgWzExLCAgNSwgMzYsIDEyXV0sCgkJMTUgPT4gW1sgNSwgIDEsIDEwOSwgIDg3XSwgWyA1LCAgNSwgNjUsIDQxXSwgWyA1LCAgNywgNTQsIDI0XSwgWzExLCAgNywgMzYsIDEyXV0sCgkJMTYgPT4gW1sgNSwgIDEsIDEyMiwgIDk4XSwgWyA3LCAgMywgNzMsIDQ1XSwgWzE1LCAgMiwgNDMsIDE5XSwgWyAzLCAxMywgNDUsIDE1XV0sCgkJMTcgPT4gW1sgMSwgIDUsIDEzNSwgMTA3XSwgWzEwLCAgMSwgNzQsIDQ2XSwgWyAxLCAxNSwgNTAsIDIyXSwgWyAyLCAxNywgNDIsIDE0XV0sCgkJMTggPT4gW1sgNSwgIDEsIDE1MCwgMTIwXSwgWyA5LCAgNCwgNjksIDQzXSwgWzE3LCAgMSwgNTAsIDIyXSwgWyAyLCAxOSwgNDIsIDE0XV0sCgkJMTkgPT4gW1sgMywgIDQsIDE0MSwgMTEzXSwgWyAzLCAxMSwgNzAsIDQ0XSwgWzE3LCAgNCwgNDcsIDIxXSwgWyA5LCAxNiwgMzksIDEzXV0sCgkJMjAgPT4gW1sgMywgIDUsIDEzNSwgMTA3XSwgWyAzLCAxMywgNjcsIDQxXSwgWzE1LCAgNSwgNTQsIDI0XSwgWzE1LCAxMCwgNDMsIDE1XV0sCgkJMjEgPT4gW1sgNCwgIDQsIDE0NCwgMTE2XSwgWzE3LCAgMCwgNjgsIDQyXSwgWzE3LCAgNiwgNTAsIDIyXSwgWzE5LCAgNiwgNDYsIDE2XV0sCgkJMjIgPT4gW1sgMiwgIDcsIDEzOSwgMTExXSwgWzE3LCAgMCwgNzQsIDQ2XSwgWyA3LCAxNiwgNTQsIDI0XSwgWzM0LCAgMCwgMzcsIDEzXV0sCgkJMjMgPT4gW1sgNCwgIDUsIDE1MSwgMTIxXSwgWyA0LCAxNCwgNzUsIDQ3XSwgWzExLCAxNCwgNTQsIDI0XSwgWzE2LCAxNCwgNDUsIDE1XV0sCgkJMjQgPT4gW1sgNiwgIDQsIDE0NywgMTE3XSwgWyA2LCAxNCwgNzMsIDQ1XSwgWzExLCAxNiwgNTQsIDI0XSwgWzMwLCAgMiwgNDYsIDE2XV0sCgkJMjUgPT4gW1sgOCwgIDQsIDEzMiwgMTA2XSwgWyA4LCAxMywgNzUsIDQ3XSwgWyA3LCAyMiwgNTQsIDI0XSwgWzIyLCAxMywgNDUsIDE1XV0sCgkJMjYgPT4gW1sxMCwgIDIsIDE0MiwgMTE0XSwgWzE5LCAgNCwgNzQsIDQ2XSwgWzI4LCAgNiwgNTAsIDIyXSwgWzMzLCAgNCwgNDYsIDE2XV0sCgkJMjcgPT4gW1sgOCwgIDQsIDE1MiwgMTIyXSwgWzIyLCAgMywgNzMsIDQ1XSwgWyA4LCAyNiwgNTMsIDIzXSwgWzEyLCAyOCwgNDUsIDE1XV0sCgkJMjggPT4gW1sgMywgMTAsIDE0NywgMTE3XSwgWyAzLCAyMywgNzMsIDQ1XSwgWyA0LCAzMSwgNTQsIDI0XSwgWzExLCAzMSwgNDUsIDE1XV0sCgkJMjkgPT4gW1sgNywgIDcsIDE0NiwgMTE2XSwgWzIxLCAgNywgNzMsIDQ1XSwgWyAxLCAzNywgNTMsIDIzXSwgWzE5LCAyNiwgNDUsIDE1XV0sCgkJMzAgPT4gW1sgNSwgMTAsIDE0NSwgMTE1XSwgWzE5LCAxMCwgNzUsIDQ3XSwgWzE1LCAyNSwgNTQsIDI0XSwgWzIzLCAyNSwgNDUsIDE1XV0sCgkJMzEgPT4gW1sxMywgIDMsIDE0NSwgMTE1XSwgWyAyLCAyOSwgNzQsIDQ2XSwgWzQyLCAgMSwgNTQsIDI0XSwgWzIzLCAyOCwgNDUsIDE1XV0sCgkJMzIgPT4gW1sxNywgIDAsIDE0NSwgMTE1XSwgWzEwLCAyMywgNzQsIDQ2XSwgWzEwLCAzNSwgNTQsIDI0XSwgWzE5LCAzNSwgNDUsIDE1XV0sCgkJMzMgPT4gW1sxNywgIDEsIDE0NSwgMTE1XSwgWzE0LCAyMSwgNzQsIDQ2XSwgWzI5LCAxOSwgNTQsIDI0XSwgWzExLCA0NiwgNDUsIDE1XV0sCgkJMzQgPT4gW1sxMywgIDYsIDE0NSwgMTE1XSwgWzE0LCAyMywgNzQsIDQ2XSwgWzQ0LCAgNywgNTQsIDI0XSwgWzU5LCAgMSwgNDYsIDE2XV0sCgkJMzUgPT4gW1sxMiwgIDcsIDE1MSwgMTIxXSwgWzEyLCAyNiwgNzUsIDQ3XSwgWzM5LCAxNCwgNTQsIDI0XSwgWzIyLCA0MSwgNDUsIDE1XV0sCgkJMzYgPT4gW1sgNiwgMTQsIDE1MSwgMTIxXSwgWyA2LCAzNCwgNzUsIDQ3XSwgWzQ2LCAxMCwgNTQsIDI0XSwgWyAyLCA2NCwgNDUsIDE1XV0sCgkJMzcgPT4gW1sxNywgIDQsIDE1MiwgMTIyXSwgWzI5LCAxNCwgNzQsIDQ2XSwgWzQ5LCAxMCwgNTQsIDI0XSwgWzI0LCA0NiwgNDUsIDE1XV0sCgkJMzggPT4gW1sgNCwgMTgsIDE1MiwgMTIyXSwgWzEzLCAzMiwgNzQsIDQ2XSwgWzQ4LCAxNCwgNTQsIDI0XSwgWzQyLCAzMiwgNDUsIDE1XV0sCgkJMzkgPT4gW1syMCwgIDQsIDE0NywgMTE3XSwgWzQwLCAgNywgNzUsIDQ3XSwgWzQzLCAyMiwgNTQsIDI0XSwgWzEwLCA2NywgNDUsIDE1XV0sCgkJNDAgPT4gW1sxOSwgIDYsIDE0OCwgMTE4XSwgWzE4LCAzMSwgNzUsIDQ3XSwgWzM0LCAzNCwgNTQsIDI0XSwgWzIwLCA2MSwgNDUsIDE1XV0sCgldOwoKCS8qKgoJICogU2V0cyB0aGUgZGF0YSBzdHJpbmcgKGludGVybmFsbHkgY2FsbGVkIGJ5IHRoZSBjb25zdHJ1Y3RvcikKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldERhdGEoc3RyaW5nICRkYXRhKTpRUkRhdGFJbnRlcmZhY2U7CgoJLyoqCgkgKiByZXR1cm5zIGEgZnJlc2ggbWF0cml4IG9iamVjdCB3aXRoIHRoZSBkYXRhIHdyaXR0ZW4gZm9yIHRoZSBnaXZlbiAkbWFza1BhdHRlcm4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGluaXRNYXRyaXgoaW50ICRtYXNrUGF0dGVybiwgYm9vbCAkdGVzdCA9IG51bGwpOlFSTWF0cml4OwoKfQoiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjIzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjIzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6IkRhdGEiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YToxOntzOjM5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2UiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcSW50ZXJmYWNlXyI6Njp7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcSW50ZXJmYWNlXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM5OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2UiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToiUVJEYXRhSW50ZXJmYWNlIjt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcSW50ZXJmYWNlXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTM2OiJTcGVjaWZpZXMgdGhlIG1ldGhvZHMgcmVxaXJlZCBmb3IgdGhlIGRhdGEgbW9kdWxlcyAoTnVtYmVyLCBBbHBoYW51bSwgQnl0ZSBhbmQgS2FuamkpCmFuZCBob2xkcyB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIHNldmVyYWwgY29uc3RhbnRzIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjIyOiJjaGlsbGVybGFuXFFSQ29kZVxEYXRhIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEludGVyZmFjZV8AY29uc3RhbnRzIjthOjU6e3M6NTY6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZTo6Q0hBUl9NQVBfTlVNQkVSIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU2OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2U6OkNIQVJfTUFQX05VTUJFUiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJDSEFSX01BUF9OVU1CRVIiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY5O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjEwMDoiWycwJyA9PiAwLCAnMScgPT4gMSwgJzInID0+IDIsICczJyA9PiAzLCAnNCcgPT4gNCwgJzUnID0+IDUsICc2JyA9PiA2LCAnNycgPT4gNywgJzgnID0+IDgsICc5JyA9PiA5XSI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fX1zOjU4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2U6OkNIQVJfTUFQX0FMUEhBTlVNIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50Ijo1OntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU4OiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2U6OkNIQVJfTUFQX0FMUEhBTlVNIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTc6IkNIQVJfTUFQX0FMUEhBTlVNIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjI2OiJJU08vSUVDIDE4MDA0OjIwMDAgVGFibGUgNSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo2OTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2YWx1ZSI7czo0ODU6IlsnMCcgPT4gMCwgJzEnID0+IDEsICcyJyA9PiAyLCAnMycgPT4gMywgJzQnID0+IDQsICc1JyA9PiA1LCAnNicgPT4gNiwgJzcnID0+IDcsICc4JyA9PiA4LCAnOScgPT4gOSwgJ0EnID0+IDEwLCAnQicgPT4gMTEsICdDJyA9PiAxMiwgJ0QnID0+IDEzLCAnRScgPT4gMTQsICdGJyA9PiAxNSwgJ0cnID0+IDE2LCAnSCcgPT4gMTcsICdJJyA9PiAxOCwgJ0onID0+IDE5LCAnSycgPT4gMjAsICdMJyA9PiAyMSwgJ00nID0+IDIyLCAnTicgPT4gMjMsICdPJyA9PiAyNCwgJ1AnID0+IDI1LCAnUScgPT4gMjYsICdSJyA9PiAyNywgJ1MnID0+IDI4LCAnVCcgPT4gMjksICdVJyA9PiAzMCwgJ1YnID0+IDMxLCAnVycgPT4gMzIsICdYJyA9PiAzMywgJ1knID0+IDM0LCAnWicgPT4gMzUsICcgJyA9PiAzNiwgJyQnID0+IDM3LCAnJScgPT4gMzgsICcqJyA9PiAzOSwgJysnID0+IDQwLCAnLScgPT4gNDEsICcuJyA9PiA0MiwgJy8nID0+IDQzLCAnOicgPT4gNDRdIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6NTE6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZTo6TUFYX0xFTkdUSCI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlOjpNQVhfTEVOR1RIIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6Ik1BWF9MRU5HVEgiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTA1OiJJU08vSUVDIDE4MDA0OjIwMDAgVGFibGVzIDctMTEgLSBOdW1iZXIgb2Ygc3ltYm9sIGNoYXJhY3RlcnMgYW5kIGlucHV0IGRhdGEgY2FwYWNpdHkgZm9yIHZlcnNpb25zIDEgdG8gNDAiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwiOjE6e3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsAHVyaSI7czo0MzoiaHR0cDovL3d3dy5xcmNvZGUuY29tL2VuL2Fib3V0L3ZlcnNpb24uaHRtbCI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjY6IltdW11bXSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njk7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6NDY5NzoiWwogICAgLy8JdiAgPT4gW05VTUVSSUMgPT4gW0wsIE0sIFEsIEggXSwgQUxQSEFOVU0gPT4gW0wsIE0sIFEsIEhdLCBCSU5BUlkgPT4gW0wsIE0sIFEsIEggIF0sIEtBTkpJID0+IFtMLCBNLCBRLCBIICAgXV0gIC8vIG1vZHVsZXMKICAgIDEgPT4gW1s0MSwgMzQsIDI3LCAxN10sIFsyNSwgMjAsIDE2LCAxMF0sIFsxNywgMTQsIDExLCA3XSwgWzEwLCA4LCA3LCA0XV0sCiAgICAvLyAgMjEKICAgIDIgPT4gW1s3NywgNjMsIDQ4LCAzNF0sIFs0NywgMzgsIDI5LCAyMF0sIFszMiwgMjYsIDIwLCAxNF0sIFsyMCwgMTYsIDEyLCA4XV0sCiAgICAvLyAgMjUKICAgIDMgPT4gW1sxMjcsIDEwMSwgNzcsIDU4XSwgWzc3LCA2MSwgNDcsIDM1XSwgWzUzLCA0MiwgMzIsIDI0XSwgWzMyLCAyNiwgMjAsIDE1XV0sCiAgICAvLyAgMjkKICAgIDQgPT4gW1sxODcsIDE0OSwgMTExLCA4Ml0sIFsxMTQsIDkwLCA2NywgNTBdLCBbNzgsIDYyLCA0NiwgMzRdLCBbNDgsIDM4LCAyOCwgMjFdXSwKICAgIC8vICAzMwogICAgNSA9PiBbWzI1NSwgMjAyLCAxNDQsIDEwNl0sIFsxNTQsIDEyMiwgODcsIDY0XSwgWzEwNiwgODQsIDYwLCA0NF0sIFs2NSwgNTIsIDM3LCAyN11dLAogICAgLy8gIDM3CiAgICA2ID0+IFtbMzIyLCAyNTUsIDE3OCwgMTM5XSwgWzE5NSwgMTU0LCAxMDgsIDg0XSwgWzEzNCwgMTA2LCA3NCwgNThdLCBbODIsIDY1LCA0NSwgMzZdXSwKICAgIC8vICA0MQogICAgNyA9PiBbWzM3MCwgMjkzLCAyMDcsIDE1NF0sIFsyMjQsIDE3OCwgMTI1LCA5M10sIFsxNTQsIDEyMiwgODYsIDY0XSwgWzk1LCA3NSwgNTMsIDM5XV0sCiAgICAvLyAgNDUKICAgIDggPT4gW1s0NjEsIDM2NSwgMjU5LCAyMDJdLCBbMjc5LCAyMjEsIDE1NywgMTIyXSwgWzE5MiwgMTUyLCAxMDgsIDg0XSwgWzExOCwgOTMsIDY2LCA1Ml1dLAogICAgLy8gIDQ5CiAgICA5ID0+IFtbNTUyLCA0MzIsIDMxMiwgMjM1XSwgWzMzNSwgMjYyLCAxODksIDE0M10sIFsyMzAsIDE4MCwgMTMwLCA5OF0sIFsxNDEsIDExMSwgODAsIDYwXV0sCiAgICAvLyAgNTMKICAgIDEwID0+IFtbNjUyLCA1MTMsIDM2NCwgMjg4XSwgWzM5NSwgMzExLCAyMjEsIDE3NF0sIFsyNzEsIDIxMywgMTUxLCAxMTldLCBbMTY3LCAxMzEsIDkzLCA3NF1dLAogICAgLy8gIDU3CiAgICAxMSA9PiBbWzc3MiwgNjA0LCA0MjcsIDMzMV0sIFs0NjgsIDM2NiwgMjU5LCAyMDBdLCBbMzIxLCAyNTEsIDE3NywgMTM3XSwgWzE5OCwgMTU1LCAxMDksIDg1XV0sCiAgICAvLyAgNjEKICAgIDEyID0+IFtbODgzLCA2OTEsIDQ4OSwgMzc0XSwgWzUzNSwgNDE5LCAyOTYsIDIyN10sIFszNjcsIDI4NywgMjAzLCAxNTVdLCBbMjI2LCAxNzcsIDEyNSwgOTZdXSwKICAgIC8vICA2NQogICAgMTMgPT4gW1sxMDIyLCA3OTYsIDU4MCwgNDI3XSwgWzYxOSwgNDgzLCAzNTIsIDI1OV0sIFs0MjUsIDMzMSwgMjQxLCAxNzddLCBbMjYyLCAyMDQsIDE0OSwgMTA5XV0sCiAgICAvLyAgNjkgTklDRSEKICAgIDE0ID0+IFtbMTEwMSwgODcxLCA2MjEsIDQ2OF0sIFs2NjcsIDUyOCwgMzc2LCAyODNdLCBbNDU4LCAzNjIsIDI1OCwgMTk0XSwgWzI4MiwgMjIzLCAxNTksIDEyMF1dLAogICAgLy8gIDczCiAgICAxNSA9PiBbWzEyNTAsIDk5MSwgNzAzLCA1MzBdLCBbNzU4LCA2MDAsIDQyNiwgMzIxXSwgWzUyMCwgNDEyLCAyOTIsIDIyMF0sIFszMjAsIDI1NCwgMTgwLCAxMzZdXSwKICAgIC8vICA3NwogICAgMTYgPT4gW1sxNDA4LCAxMDgyLCA3NzUsIDYwMl0sIFs4NTQsIDY1NiwgNDcwLCAzNjVdLCBbNTg2LCA0NTAsIDMyMiwgMjUwXSwgWzM2MSwgMjc3LCAxOTgsIDE1NF1dLAogICAgLy8gIDgxCiAgICAxNyA9PiBbWzE1NDgsIDEyMTIsIDg3NiwgNjc0XSwgWzkzOCwgNzM0LCA1MzEsIDQwOF0sIFs2NDQsIDUwNCwgMzY0LCAyODBdLCBbMzk3LCAzMTAsIDIyNCwgMTczXV0sCiAgICAvLyAgODUKICAgIDE4ID0+IFtbMTcyNSwgMTM0NiwgOTQ4LCA3NDZdLCBbMTA0NiwgODE2LCA1NzQsIDQ1Ml0sIFs3MTgsIDU2MCwgMzk0LCAzMTBdLCBbNDQyLCAzNDUsIDI0MywgMTkxXV0sCiAgICAvLyAgODkKICAgIDE5ID0+IFtbMTkwMywgMTUwMCwgMTA2MywgODEzXSwgWzExNTMsIDkwOSwgNjQ0LCA0OTNdLCBbNzkyLCA2MjQsIDQ0MiwgMzM4XSwgWzQ4OCwgMzg0LCAyNzIsIDIwOF1dLAogICAgLy8gIDkzCiAgICAyMCA9PiBbWzIwNjEsIDE2MDAsIDExNTksIDkxOV0sIFsxMjQ5LCA5NzAsIDcwMiwgNTU3XSwgWzg1OCwgNjY2LCA0ODIsIDM4Ml0sIFs1MjgsIDQxMCwgMjk3LCAyMzVdXSwKICAgIC8vICA5NwogICAgMjEgPT4gW1syMjMyLCAxNzA4LCAxMjI0LCA5NjldLCBbMTM1MiwgMTAzNSwgNzQyLCA1ODddLCBbOTI5LCA3MTEsIDUwOSwgNDAzXSwgWzU3MiwgNDM4LCAzMTQsIDI0OF1dLAogICAgLy8gMTAxCiAgICAyMiA9PiBbWzI0MDksIDE4NzIsIDEzNTgsIDEwNTZdLCBbMTQ2MCwgMTEzNCwgODIzLCA2NDBdLCBbMTAwMywgNzc5LCA1NjUsIDQzOV0sIFs2MTgsIDQ4MCwgMzQ4LCAyNzBdXSwKICAgIC8vIDEwNQogICAgMjMgPT4gW1syNjIwLCAyMDU5LCAxNDY4LCAxMTA4XSwgWzE1ODgsIDEyNDgsIDg5MCwgNjcyXSwgWzEwOTEsIDg1NywgNjExLCA0NjFdLCBbNjcyLCA1MjgsIDM3NiwgMjg0XV0sCiAgICAvLyAxMDkKICAgIDI0ID0+IFtbMjgxMiwgMjE4OCwgMTU4OCwgMTIyOF0sIFsxNzA0LCAxMzI2LCA5NjMsIDc0NF0sIFsxMTcxLCA5MTEsIDY2MSwgNTExXSwgWzcyMSwgNTYxLCA0MDcsIDMxNV1dLAogICAgLy8gMTEzCiAgICAyNSA9PiBbWzMwNTcsIDIzOTUsIDE3MTgsIDEyODZdLCBbMTg1MywgMTQ1MSwgMTA0MSwgNzc5XSwgWzEyNzMsIDk5NywgNzE1LCA1MzVdLCBbNzg0LCA2MTQsIDQ0MCwgMzMwXV0sCiAgICAvLyAxMTcKICAgIDI2ID0+IFtbMzI4MywgMjU0NCwgMTgwNCwgMTQyNV0sIFsxOTkwLCAxNTQyLCAxMDk0LCA4NjRdLCBbMTM2NywgMTA1OSwgNzUxLCA1OTNdLCBbODQyLCA2NTIsIDQ2MiwgMzY1XV0sCiAgICAvLyAxMjEKICAgIDI3ID0+IFtbMzUxNywgMjcwMSwgMTkzMywgMTUwMV0sIFsyMTMyLCAxNjM3LCAxMTcyLCA5MTBdLCBbMTQ2NSwgMTEyNSwgODA1LCA2MjVdLCBbOTAyLCA2OTIsIDQ5NiwgMzg1XV0sCiAgICAvLyAxMjUKICAgIDI4ID0+IFtbMzY2OSwgMjg1NywgMjA4NSwgMTU4MV0sIFsyMjIzLCAxNzMyLCAxMjYzLCA5NThdLCBbMTUyOCwgMTE5MCwgODY4LCA2NThdLCBbOTQwLCA3MzIsIDUzNCwgNDA1XV0sCiAgICAvLyAxMjkKICAgIDI5ID0+IFtbMzkwOSwgMzAzNSwgMjE4MSwgMTY3N10sIFsyMzY5LCAxODM5LCAxMzIyLCAxMDE2XSwgWzE2MjgsIDEyNjQsIDkwOCwgNjk4XSwgWzEwMDIsIDc3OCwgNTU5LCA0MzBdXSwKICAgIC8vIDEzMwogICAgMzAgPT4gW1s0MTU4LCAzMjg5LCAyMzU4LCAxNzgyXSwgWzI1MjAsIDE5OTQsIDE0MjksIDEwODBdLCBbMTczMiwgMTM3MCwgOTgyLCA3NDJdLCBbMTA2NiwgODQzLCA2MDQsIDQ1N11dLAogICAgLy8gMTM3CiAgICAzMSA9PiBbWzQ0MTcsIDM0ODYsIDI0NzMsIDE4OTddLCBbMjY3NywgMjExMywgMTQ5OSwgMTE1MF0sIFsxODQwLCAxNDUyLCAxMDMwLCA3OTBdLCBbMTEzMiwgODk0LCA2MzQsIDQ4Nl1dLAogICAgLy8gMTQxCiAgICAzMiA9PiBbWzQ2ODYsIDM2OTMsIDI2NzAsIDIwMjJdLCBbMjg0MCwgMjIzOCwgMTYxOCwgMTIyNl0sIFsxOTUyLCAxNTM4LCAxMTEyLCA4NDJdLCBbMTIwMSwgOTQ3LCA2ODQsIDUxOF1dLAogICAgLy8gMTQ1CiAgICAzMyA9PiBbWzQ5NjUsIDM5MDksIDI4MDUsIDIxNTddLCBbMzAwOSwgMjM2OSwgMTcwMCwgMTMwN10sIFsyMDY4LCAxNjI4LCAxMTY4LCA4OThdLCBbMTI3MywgMTAwMiwgNzE5LCA1NTNdXSwKICAgIC8vIDE0OQogICAgMzQgPT4gW1s1MjUzLCA0MTM0LCAyOTQ5LCAyMzAxXSwgWzMxODMsIDI1MDYsIDE3ODcsIDEzOTRdLCBbMjE4OCwgMTcyMiwgMTIyOCwgOTU4XSwgWzEzNDcsIDEwNjAsIDc1NiwgNTkwXV0sCiAgICAvLyAxNTMKICAgIDM1ID0+IFtbNTUyOSwgNDM0MywgMzA4MSwgMjM2MV0sIFszMzUxLCAyNjMyLCAxODY3LCAxNDMxXSwgWzIzMDMsIDE4MDksIDEyODMsIDk4M10sIFsxNDE3LCAxMTEzLCA3OTAsIDYwNV1dLAogICAgLy8gMTU3CiAgICAzNiA9PiBbWzU4MzYsIDQ1ODgsIDMyNDQsIDI1MjRdLCBbMzUzNywgMjc4MCwgMTk2NiwgMTUzMF0sIFsyNDMxLCAxOTExLCAxMzUxLCAxMDUxXSwgWzE0OTYsIDExNzYsIDgzMiwgNjQ3XV0sCiAgICAvLyAxNjEKICAgIDM3ID0+IFtbNjE1MywgNDc3NSwgMzQxNywgMjYyNV0sIFszNzI5LCAyODk0LCAyMDcxLCAxNTkxXSwgWzI1NjMsIDE5ODksIDE0MjMsIDEwOTNdLCBbMTU3NywgMTIyNCwgODc2LCA2NzNdXSwKICAgIC8vIDE2NQogICAgMzggPT4gW1s2NDc5LCA1MDM5LCAzNTk5LCAyNzM1XSwgWzM5MjcsIDMwNTQsIDIxODEsIDE2NThdLCBbMjY5OSwgMjA5OSwgMTQ5OSwgMTEzOV0sIFsxNjYxLCAxMjkyLCA5MjMsIDcwMV1dLAogICAgLy8gMTY5CiAgICAzOSA9PiBbWzY3NDMsIDUzMTMsIDM3OTEsIDI5MjddLCBbNDA4NywgMzIyMCwgMjI5OCwgMTc3NF0sIFsyODA5LCAyMjEzLCAxNTc5LCAxMjE5XSwgWzE3MjksIDEzNjIsIDk3MiwgNzUwXV0sCiAgICAvLyAxNzMKICAgIDQwID0+IFtbNzA4OSwgNTU5NiwgMzk5MywgMzA1N10sIFs0Mjk2LCAzMzkxLCAyNDIwLCAxODUyXSwgWzI5NTMsIDIzMzEsIDE2NjMsIDEyNzNdLCBbMTgxNywgMTQzNSwgMTAyNCwgNzg0XV0sCl0iO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO319czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlOjpNQVhfQklUUyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudCI6NTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlOjpNQVhfQklUUyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6Ik1BWF9CSVRTIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjEwNToiSVNPL0lFQyAxODAwNDoyMDAwIFRhYmxlcyA3LTExIC0gTnVtYmVyIG9mIHN5bWJvbCBjaGFyYWN0ZXJzIGFuZCBpbnB1dCBkYXRhIGNhcGFjaXR5IGZvciB2ZXJzaW9ucyAxIHRvIDQwIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xWYXJfIjo0OntzOjE1OiIAKgB2YXJpYWJsZU5hbWUiO3M6MDoiIjtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NDoiW11bXSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njk7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmFsdWUiO3M6MTQ3MDoiWwogICAgLy8gdmVyc2lvbiA9PiBbTCwgTSwgUSwgSCBdCiAgICAxID0+IFsxNTIsIDEyOCwgMTA0LCA3Ml0sCiAgICAyID0+IFsyNzIsIDIyNCwgMTc2LCAxMjhdLAogICAgMyA9PiBbNDQwLCAzNTIsIDI3MiwgMjA4XSwKICAgIDQgPT4gWzY0MCwgNTEyLCAzODQsIDI4OF0sCiAgICA1ID0+IFs4NjQsIDY4OCwgNDk2LCAzNjhdLAogICAgNiA9PiBbMTA4OCwgODY0LCA2MDgsIDQ4MF0sCiAgICA3ID0+IFsxMjQ4LCA5OTIsIDcwNCwgNTI4XSwKICAgIDggPT4gWzE1NTIsIDEyMzIsIDg4MCwgNjg4XSwKICAgIDkgPT4gWzE4NTYsIDE0NTYsIDEwNTYsIDgwMF0sCiAgICAxMCA9PiBbMjE5MiwgMTcyOCwgMTIzMiwgOTc2XSwKICAgIDExID0+IFsyNTkyLCAyMDMyLCAxNDQwLCAxMTIwXSwKICAgIDEyID0+IFsyOTYwLCAyMzIwLCAxNjQ4LCAxMjY0XSwKICAgIDEzID0+IFszNDI0LCAyNjcyLCAxOTUyLCAxNDQwXSwKICAgIDE0ID0+IFszNjg4LCAyOTIwLCAyMDg4LCAxNTc2XSwKICAgIDE1ID0+IFs0MTg0LCAzMzIwLCAyMzYwLCAxNzg0XSwKICAgIDE2ID0+IFs0NzEyLCAzNjI0LCAyNjAwLCAyMDI0XSwKICAgIDE3ID0+IFs1MTc2LCA0MDU2LCAyOTM2LCAyMjY0XSwKICAgIDE4ID0+IFs1NzY4LCA0NTA0LCAzMTc2LCAyNTA0XSwKICAgIDE5ID0+IFs2MzYwLCA1MDE2LCAzNTYwLCAyNzI4XSwKICAgIDIwID0+IFs2ODg4LCA1MzUyLCAzODgwLCAzMDgwXSwKICAgIDIxID0+IFs3NDU2LCA1NzEyLCA0MDk2LCAzMjQ4XSwKICAgIDIyID0+IFs4MDQ4LCA2MjU2LCA0NTQ0LCAzNTM2XSwKICAgIDIzID0+IFs4NzUyLCA2ODgwLCA0OTEyLCAzNzEyXSwKICAgIDI0ID0+IFs5MzkyLCA3MzEyLCA1MzEyLCA0MTEyXSwKICAgIDI1ID0+IFsxMDIwOCwgODAwMCwgNTc0NCwgNDMwNF0sCiAgICAyNiA9PiBbMTA5NjAsIDg0OTYsIDYwMzIsIDQ3NjhdLAogICAgMjcgPT4gWzExNzQ0LCA5MDI0LCA2NDY0LCA1MDI0XSwKICAgIDI4ID0+IFsxMjI0OCwgOTU0NCwgNjk2OCwgNTI4OF0sCiAgICAyOSA9PiBbMTMwNDgsIDEwMTM2LCA3Mjg4LCA1NjA4XSwKICAgIDMwID0+IFsxMzg4MCwgMTA5ODQsIDc4ODAsIDU5NjBdLAogICAgMzEgPT4gWzE0NzQ0LCAxMTY0MCwgODI2NCwgNjM0NF0sCiAgICAzMiA9PiBbMTU2NDAsIDEyMzI4LCA4OTIwLCA2NzYwXSwKICAgIDMzID0+IFsxNjU2OCwgMTMwNDgsIDkzNjgsIDcyMDhdLAogICAgMzQgPT4gWzE3NTI4LCAxMzgwMCwgOTg0OCwgNzY4OF0sCiAgICAzNSA9PiBbMTg0NDgsIDE0NDk2LCAxMDI4OCwgNzg4OF0sCiAgICAzNiA9PiBbMTk0NzIsIDE1MzEyLCAxMDgzMiwgODQzMl0sCiAgICAzNyA9PiBbMjA1MjgsIDE1OTM2LCAxMTQwOCwgODc2OF0sCiAgICAzOCA9PiBbMjE2MTYsIDE2ODE2LCAxMjAxNiwgOTEzNl0sCiAgICAzOSA9PiBbMjI0OTYsIDE3NzI4LCAxMjY1NiwgOTc3Nl0sCiAgICA0MCA9PiBbMjM2NDgsIDE4NjcyLCAxMzMyOCwgMTAyMDhdLApdIjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDb25zdGFudABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fXM6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZTo6UlNCTE9DS1MiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQiOjU6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZTo6UlNCTE9DS1MiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJSU0JMT0NLUyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czowOiIiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFNlZSI6Mzp7czo3OiIAKgBuYW1lIjtzOjM6InNlZSI7czo5OiIAKgByZWZlcnMiO086NTI6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJlZmVyZW5jZVxVcmwiOjE6e3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZWZlcmVuY2VcVXJsAHVyaSI7czo2MToiaHR0cDovL3d3dy50aG9ua3kuY29tL3FyLWNvZGUtdHV0b3JpYWwvZXJyb3ItY29ycmVjdGlvbi10YWJsZSI7fXM6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjY6IltdW11bXSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njk7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTQyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AHZhbHVlIjtzOjMwNTU6IlsxID0+IFtbMSwgMCwgMjYsIDE5XSwgWzEsIDAsIDI2LCAxNl0sIFsxLCAwLCAyNiwgMTNdLCBbMSwgMCwgMjYsIDldXSwgMiA9PiBbWzEsIDAsIDQ0LCAzNF0sIFsxLCAwLCA0NCwgMjhdLCBbMSwgMCwgNDQsIDIyXSwgWzEsIDAsIDQ0LCAxNl1dLCAzID0+IFtbMSwgMCwgNzAsIDU1XSwgWzEsIDAsIDcwLCA0NF0sIFsyLCAwLCAzNSwgMTddLCBbMiwgMCwgMzUsIDEzXV0sIDQgPT4gW1sxLCAwLCAxMDAsIDgwXSwgWzIsIDAsIDUwLCAzMl0sIFsyLCAwLCA1MCwgMjRdLCBbNCwgMCwgMjUsIDldXSwgNSA9PiBbWzEsIDAsIDEzNCwgMTA4XSwgWzIsIDAsIDY3LCA0M10sIFsyLCAyLCAzMywgMTVdLCBbMiwgMiwgMzMsIDExXV0sIDYgPT4gW1syLCAwLCA4NiwgNjhdLCBbNCwgMCwgNDMsIDI3XSwgWzQsIDAsIDQzLCAxOV0sIFs0LCAwLCA0MywgMTVdXSwgNyA9PiBbWzIsIDAsIDk4LCA3OF0sIFs0LCAwLCA0OSwgMzFdLCBbMiwgNCwgMzIsIDE0XSwgWzQsIDEsIDM5LCAxM11dLCA4ID0+IFtbMiwgMCwgMTIxLCA5N10sIFsyLCAyLCA2MCwgMzhdLCBbNCwgMiwgNDAsIDE4XSwgWzQsIDIsIDQwLCAxNF1dLCA5ID0+IFtbMiwgMCwgMTQ2LCAxMTZdLCBbMywgMiwgNTgsIDM2XSwgWzQsIDQsIDM2LCAxNl0sIFs0LCA0LCAzNiwgMTJdXSwgMTAgPT4gW1syLCAyLCA4NiwgNjhdLCBbNCwgMSwgNjksIDQzXSwgWzYsIDIsIDQzLCAxOV0sIFs2LCAyLCA0MywgMTVdXSwgMTEgPT4gW1s0LCAwLCAxMDEsIDgxXSwgWzEsIDQsIDgwLCA1MF0sIFs0LCA0LCA1MCwgMjJdLCBbMywgOCwgMzYsIDEyXV0sIDEyID0+IFtbMiwgMiwgMTE2LCA5Ml0sIFs2LCAyLCA1OCwgMzZdLCBbNCwgNiwgNDYsIDIwXSwgWzcsIDQsIDQyLCAxNF1dLCAxMyA9PiBbWzQsIDAsIDEzMywgMTA3XSwgWzgsIDEsIDU5LCAzN10sIFs4LCA0LCA0NCwgMjBdLCBbMTIsIDQsIDMzLCAxMV1dLCAxNCA9PiBbWzMsIDEsIDE0NSwgMTE1XSwgWzQsIDUsIDY0LCA0MF0sIFsxMSwgNSwgMzYsIDE2XSwgWzExLCA1LCAzNiwgMTJdXSwgMTUgPT4gW1s1LCAxLCAxMDksIDg3XSwgWzUsIDUsIDY1LCA0MV0sIFs1LCA3LCA1NCwgMjRdLCBbMTEsIDcsIDM2LCAxMl1dLCAxNiA9PiBbWzUsIDEsIDEyMiwgOThdLCBbNywgMywgNzMsIDQ1XSwgWzE1LCAyLCA0MywgMTldLCBbMywgMTMsIDQ1LCAxNV1dLCAxNyA9PiBbWzEsIDUsIDEzNSwgMTA3XSwgWzEwLCAxLCA3NCwgNDZdLCBbMSwgMTUsIDUwLCAyMl0sIFsyLCAxNywgNDIsIDE0XV0sIDE4ID0+IFtbNSwgMSwgMTUwLCAxMjBdLCBbOSwgNCwgNjksIDQzXSwgWzE3LCAxLCA1MCwgMjJdLCBbMiwgMTksIDQyLCAxNF1dLCAxOSA9PiBbWzMsIDQsIDE0MSwgMTEzXSwgWzMsIDExLCA3MCwgNDRdLCBbMTcsIDQsIDQ3LCAyMV0sIFs5LCAxNiwgMzksIDEzXV0sIDIwID0+IFtbMywgNSwgMTM1LCAxMDddLCBbMywgMTMsIDY3LCA0MV0sIFsxNSwgNSwgNTQsIDI0XSwgWzE1LCAxMCwgNDMsIDE1XV0sIDIxID0+IFtbNCwgNCwgMTQ0LCAxMTZdLCBbMTcsIDAsIDY4LCA0Ml0sIFsxNywgNiwgNTAsIDIyXSwgWzE5LCA2LCA0NiwgMTZdXSwgMjIgPT4gW1syLCA3LCAxMzksIDExMV0sIFsxNywgMCwgNzQsIDQ2XSwgWzcsIDE2LCA1NCwgMjRdLCBbMzQsIDAsIDM3LCAxM11dLCAyMyA9PiBbWzQsIDUsIDE1MSwgMTIxXSwgWzQsIDE0LCA3NSwgNDddLCBbMTEsIDE0LCA1NCwgMjRdLCBbMTYsIDE0LCA0NSwgMTVdXSwgMjQgPT4gW1s2LCA0LCAxNDcsIDExN10sIFs2LCAxNCwgNzMsIDQ1XSwgWzExLCAxNiwgNTQsIDI0XSwgWzMwLCAyLCA0NiwgMTZdXSwgMjUgPT4gW1s4LCA0LCAxMzIsIDEwNl0sIFs4LCAxMywgNzUsIDQ3XSwgWzcsIDIyLCA1NCwgMjRdLCBbMjIsIDEzLCA0NSwgMTVdXSwgMjYgPT4gW1sxMCwgMiwgMTQyLCAxMTRdLCBbMTksIDQsIDc0LCA0Nl0sIFsyOCwgNiwgNTAsIDIyXSwgWzMzLCA0LCA0NiwgMTZdXSwgMjcgPT4gW1s4LCA0LCAxNTIsIDEyMl0sIFsyMiwgMywgNzMsIDQ1XSwgWzgsIDI2LCA1MywgMjNdLCBbMTIsIDI4LCA0NSwgMTVdXSwgMjggPT4gW1szLCAxMCwgMTQ3LCAxMTddLCBbMywgMjMsIDczLCA0NV0sIFs0LCAzMSwgNTQsIDI0XSwgWzExLCAzMSwgNDUsIDE1XV0sIDI5ID0+IFtbNywgNywgMTQ2LCAxMTZdLCBbMjEsIDcsIDczLCA0NV0sIFsxLCAzNywgNTMsIDIzXSwgWzE5LCAyNiwgNDUsIDE1XV0sIDMwID0+IFtbNSwgMTAsIDE0NSwgMTE1XSwgWzE5LCAxMCwgNzUsIDQ3XSwgWzE1LCAyNSwgNTQsIDI0XSwgWzIzLCAyNSwgNDUsIDE1XV0sIDMxID0+IFtbMTMsIDMsIDE0NSwgMTE1XSwgWzIsIDI5LCA3NCwgNDZdLCBbNDIsIDEsIDU0LCAyNF0sIFsyMywgMjgsIDQ1LCAxNV1dLCAzMiA9PiBbWzE3LCAwLCAxNDUsIDExNV0sIFsxMCwgMjMsIDc0LCA0Nl0sIFsxMCwgMzUsIDU0LCAyNF0sIFsxOSwgMzUsIDQ1LCAxNV1dLCAzMyA9PiBbWzE3LCAxLCAxNDUsIDExNV0sIFsxNCwgMjEsIDc0LCA0Nl0sIFsyOSwgMTksIDU0LCAyNF0sIFsxMSwgNDYsIDQ1LCAxNV1dLCAzNCA9PiBbWzEzLCA2LCAxNDUsIDExNV0sIFsxNCwgMjMsIDc0LCA0Nl0sIFs0NCwgNywgNTQsIDI0XSwgWzU5LCAxLCA0NiwgMTZdXSwgMzUgPT4gW1sxMiwgNywgMTUxLCAxMjFdLCBbMTIsIDI2LCA3NSwgNDddLCBbMzksIDE0LCA1NCwgMjRdLCBbMjIsIDQxLCA0NSwgMTVdXSwgMzYgPT4gW1s2LCAxNCwgMTUxLCAxMjFdLCBbNiwgMzQsIDc1LCA0N10sIFs0NiwgMTAsIDU0LCAyNF0sIFsyLCA2NCwgNDUsIDE1XV0sIDM3ID0+IFtbMTcsIDQsIDE1MiwgMTIyXSwgWzI5LCAxNCwgNzQsIDQ2XSwgWzQ5LCAxMCwgNTQsIDI0XSwgWzI0LCA0NiwgNDUsIDE1XV0sIDM4ID0+IFtbNCwgMTgsIDE1MiwgMTIyXSwgWzEzLCAzMiwgNzQsIDQ2XSwgWzQ4LCAxNCwgNTQsIDI0XSwgWzQyLCAzMiwgNDUsIDE1XV0sIDM5ID0+IFtbMjAsIDQsIDE0NywgMTE3XSwgWzQwLCA3LCA3NSwgNDddLCBbNDMsIDIyLCA1NCwgMjRdLCBbMTAsIDY3LCA0NSwgMTVdXSwgNDAgPT4gW1sxOSwgNiwgMTQ4LCAxMThdLCBbMTgsIDMxLCA3NSwgNDddLCBbMzQsIDM0LCA1NCwgMjRdLCBbMjAsIDYxLCA0NSwgMTVdXV0iO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENvbnN0YW50AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNDc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ29uc3RhbnQAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9fX1zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxJbnRlcmZhY2VfAG1ldGhvZHMiO2E6Mjp7czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlOjpzZXREYXRhKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjo5OntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjU5OiJTZXRzIHRoZSBkYXRhIHN0cmluZyAoaW50ZXJuYWxseSBjYWxsZWQgYnkgdGhlIGNvbnN0cnVjdG9yKSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjY5O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE5MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MDoiXGNoaWxsZXJsYW5cUVJDb2RlXERhdGFcUVJEYXRhSW50ZXJmYWNlOjpzZXREYXRhKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo3OiJzZXREYXRhIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjQ6ImRhdGEiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTkzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mzk6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE1OiJRUkRhdGFJbnRlcmZhY2UiO319fXM6NTM6IlxjaGlsbGVybGFuXFFSQ29kZVxEYXRhXFFSRGF0YUludGVyZmFjZTo6aW5pdE1hdHJpeCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6OTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo3ODoicmV0dXJucyBhIGZyZXNoIG1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgZGF0YSB3cml0dGVuIGZvciB0aGUgZ2l2ZW4gJG1hc2tQYXR0ZXJuIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Njk7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTk1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUzOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUkRhdGFJbnRlcmZhY2U6OmluaXRNYXRyaXgoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJpbml0TWF0cml4Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjExOiJtYXNrUGF0dGVybiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo0OiJ0ZXN0IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQm9vbGVhbiI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO3M6NDoibnVsbCI7czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE5ODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMyOiJcY2hpbGxlcmxhblxRUkNvZGVcRGF0YVxRUk1hdHJpeCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6IlFSTWF0cml4Ijt9fX19czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcSW50ZXJmYWNlXwBwYXJlbnRzIjthOjA6e31zOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxJbnRlcmZhY2VfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxOTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO319fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e319";
\ No newline at end of file
diff --git a/files/src-data-alphanum.html b/files/src-data-alphanum.html
deleted file mode 100644
index 976c003c5..000000000
--- a/files/src-data-alphanum.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AlphaNum.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- AlphaNum
- Alphanumeric mode: 0 to 9, A to Z, space, $ % * + - . / :
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-data-byte.html b/files/src-data-byte.html
deleted file mode 100644
index df0d06619..000000000
--- a/files/src-data-byte.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Byte.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- Byte
- Byte mode, ISO-8859-1 or UTF-8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-data-kanji.html b/files/src-data-kanji.html
deleted file mode 100644
index 74a4f1b48..000000000
--- a/files/src-data-kanji.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kanji.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- Kanji
- Kanji mode: double-byte characters from the Shift JIS character set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-data-maskpatterntester.html b/files/src-data-maskpatterntester.html
deleted file mode 100644
index 940f2d58d..000000000
--- a/files/src-data-maskpatterntester.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MaskPatternTester.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- MaskPatternTester
- Receives a QRDataInterface object and runs the mask pattern tests on it.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-data-number.html b/files/src-data-number.html
deleted file mode 100644
index bce5b6b0d..000000000
--- a/files/src-data-number.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Number.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- Number
- Numeric mode: decimal digits 0 to 9
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-data-qrcodedataexception.html b/files/src-data-qrcodedataexception.html
deleted file mode 100644
index 92c1c6652..000000000
--- a/files/src-data-qrcodedataexception.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCodeDataException.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRCodeDataException
- An exception container
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-data-qrdataabstract.html b/files/src-data-qrdataabstract.html
deleted file mode 100644
index 43992c788..000000000
--- a/files/src-data-qrdataabstract.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRDataAbstract.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRDataAbstract
- Processes the binary data and maps it on a matrix which is then being returned
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-data-qrdatainterface.html b/files/src-data-qrdatainterface.html
deleted file mode 100644
index aed109b47..000000000
--- a/files/src-data-qrdatainterface.html
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRDataInterface.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
- QRDataInterface
- Specifies the methods reqired for the data modules (Number, Alphanum, Byte and Kanji)
-and holds version information in several constants
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-data-qrmatrix.html b/files/src-data-qrmatrix.html
deleted file mode 100644
index 28f6d9754..000000000
--- a/files/src-data-qrmatrix.html
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRMatrix.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRMatrix
- Holds a numerical representation of the final QR Code;
-maps the ECC coded binary data and applies the mask pattern
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-helpers-bitbuffer.html b/files/src-helpers-bitbuffer.html
deleted file mode 100644
index 956179fab..000000000
--- a/files/src-helpers-bitbuffer.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- BitBuffer.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- BitBuffer
- Holds the raw binary data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-helpers-polynomial.html b/files/src-helpers-polynomial.html
deleted file mode 100644
index 377db96cd..000000000
--- a/files/src-helpers-polynomial.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Polynomial.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- Polynomial
- Polynomial long division helpers
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-output-qrcodeoutputexception.html b/files/src-output-qrcodeoutputexception.html
deleted file mode 100644
index 0f35c89a6..000000000
--- a/files/src-output-qrcodeoutputexception.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCodeOutputException.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRCodeOutputException
- An exception container
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-output-qrfpdf.html b/files/src-output-qrfpdf.html
deleted file mode 100644
index 80933957b..000000000
--- a/files/src-output-qrfpdf.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRFpdf.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRFpdf
- QRFpdf output module (requires fpdf)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-output-qrimage.html b/files/src-output-qrimage.html
deleted file mode 100644
index 0df3dea87..000000000
--- a/files/src-output-qrimage.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRImage.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRImage
- Converts the matrix into GD images, raw or base64 output (requires ext-gd)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-output-qrimagick.html b/files/src-output-qrimagick.html
deleted file mode 100644
index 481164307..000000000
--- a/files/src-output-qrimagick.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRImagick.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRImagick
- ImageMagick output module (requires ext-imagick)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-output-qrmarkup.html b/files/src-output-qrmarkup.html
deleted file mode 100644
index 680462532..000000000
--- a/files/src-output-qrmarkup.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRMarkup.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRMarkup
- Converts the matrix into markup types: HTML, SVG, .
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-output-qroutputabstract.html b/files/src-output-qroutputabstract.html
deleted file mode 100644
index cc105fcbc..000000000
--- a/files/src-output-qroutputabstract.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROutputAbstract.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QROutputAbstract
- common output abstract
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-output-qroutputinterface.html b/files/src-output-qroutputinterface.html
deleted file mode 100644
index f34a0ada2..000000000
--- a/files/src-output-qroutputinterface.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROutputInterface.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
- QROutputInterface
- Converts the data matrix into readable output
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-output-qrstring.html b/files/src-output-qrstring.html
deleted file mode 100644
index ec21e3737..000000000
--- a/files/src-output-qrstring.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRString.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRString
- Converts the matrix data into string types
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-qrcode.html b/files/src-qrcode.html
deleted file mode 100644
index cccfcb565..000000000
--- a/files/src-qrcode.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCode.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRCode
- Turns a text string into a Model 2 QR Code
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-qrcodeexception.html b/files/src-qrcodeexception.html
deleted file mode 100644
index 23750c738..000000000
--- a/files/src-qrcodeexception.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCodeException.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRCodeException
- An exception container
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-qroptions.html b/files/src-qroptions.html
deleted file mode 100644
index 8fe85632b..000000000
--- a/files/src-qroptions.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROptions.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QROptions
- The QRCode settings container
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/src-qroptionstrait.html b/files/src-qroptionstrait.html
deleted file mode 100644
index 6379b1070..000000000
--- a/files/src-qroptionstrait.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROptionsTrait.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
-
- QROptionsTrait
- The QRCode plug-in settings & setter functionality
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-data-alphanumtest.html b/files/tests-data-alphanumtest.html
deleted file mode 100644
index 94fdbf428..000000000
--- a/files/tests-data-alphanumtest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AlphaNumTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- AlphaNumTest
- Tests the AlphaNum class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-data-bytetest.html b/files/tests-data-bytetest.html
deleted file mode 100644
index 97ac45e02..000000000
--- a/files/tests-data-bytetest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ByteTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- ByteTest
- Tests the Byte class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-data-datainterfacetestabstract.html b/files/tests-data-datainterfacetestabstract.html
deleted file mode 100644
index cad5ee554..000000000
--- a/files/tests-data-datainterfacetestabstract.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- DatainterfaceTestAbstract.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- DatainterfaceTestAbstract
- The data interface test abstract
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-data-kanjitest.html b/files/tests-data-kanjitest.html
deleted file mode 100644
index c8c750ab4..000000000
--- a/files/tests-data-kanjitest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- KanjiTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- KanjiTest
- Tests the Kanji class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-data-maskpatterntestertest.html b/files/tests-data-maskpatterntestertest.html
deleted file mode 100644
index 1e107fe9d..000000000
--- a/files/tests-data-maskpatterntestertest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MaskPatternTesterTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- MaskPatternTesterTest
- MaskPatternTester coverage test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-data-numbertest.html b/files/tests-data-numbertest.html
deleted file mode 100644
index a94d1ef4d..000000000
--- a/files/tests-data-numbertest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- NumberTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- NumberTest
- Tests the Number class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-data-qrmatrixtest.html b/files/tests-data-qrmatrixtest.html
deleted file mode 100644
index d97a01936..000000000
--- a/files/tests-data-qrmatrixtest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRMatrixTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRMatrixTest
- Tests the QRMatix class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-helpers-bitbuffertest.html b/files/tests-helpers-bitbuffertest.html
deleted file mode 100644
index f334fdeb3..000000000
--- a/files/tests-helpers-bitbuffertest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- BitBufferTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- BitBufferTest
- BitBuffer coverage test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-helpers-polynomialtest.html b/files/tests-helpers-polynomialtest.html
deleted file mode 100644
index 236aa13c9..000000000
--- a/files/tests-helpers-polynomialtest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PolynomialTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- PolynomialTest
- Polynomial coverage test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-output-qrfpdftest.html b/files/tests-output-qrfpdftest.html
deleted file mode 100644
index 6fccefd22..000000000
--- a/files/tests-output-qrfpdftest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRFpdfTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRFpdfTest
- Tests the QRFpdf output module
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-output-qrimagetest.html b/files/tests-output-qrimagetest.html
deleted file mode 100644
index 28a3b0f7e..000000000
--- a/files/tests-output-qrimagetest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRImageTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRImageTest
- Tests the QRImage output module
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-output-qrimagicktest.html b/files/tests-output-qrimagicktest.html
deleted file mode 100644
index 5f05c46c8..000000000
--- a/files/tests-output-qrimagicktest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRImagickTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRImagickTest
- Tests the QRImagick output module
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-output-qrmarkuptest.html b/files/tests-output-qrmarkuptest.html
deleted file mode 100644
index e393a5241..000000000
--- a/files/tests-output-qrmarkuptest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRMarkupTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRMarkupTest
- Tests the QRMarkup output module
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-output-qroutputtestabstract.html b/files/tests-output-qroutputtestabstract.html
deleted file mode 100644
index 1e0e1e9ea..000000000
--- a/files/tests-output-qroutputtestabstract.html
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROutputTestAbstract.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QROutputTestAbstract
- Test abstract for the several (built-in) output modules,
-should also be used to test custom output modules
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-output-qrstringtest.html b/files/tests-output-qrstringtest.html
deleted file mode 100644
index b8a04c9f6..000000000
--- a/files/tests-output-qrstringtest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRStringTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRStringTest
- Tests the QRString output module
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-qrcodetest.html b/files/tests-qrcodetest.html
deleted file mode 100644
index 95c5fa98f..000000000
--- a/files/tests-qrcodetest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCodeTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRCodeTest
- Tests basic functions of the QRCode class
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/files/tests-qroptionstest.html b/files/tests-qroptionstest.html
deleted file mode 100644
index 053c5fa3b..000000000
--- a/files/tests-qroptionstest.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QROptionsTest.php
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QROptionsTest
- QROptions test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/graphs/classes.html b/graphs/classes.html
deleted file mode 100644
index d1e1557aa..000000000
--- a/graphs/classes.html
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/index.html b/index.html
deleted file mode 100644
index 359e455a6..000000000
--- a/index.html
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Documentation
-
-
-
-
- Namespaces
-
-
-
-
- chillerlan
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/indices/files.html b/indices/files.html
deleted file mode 100644
index 54e98f36f..000000000
--- a/indices/files.html
+++ /dev/null
@@ -1,163 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Files
-
A
-
-
B
-
-
D
-
-
K
-
-
M
-
-
N
-
-
P
-
-
Q
-
-
-
-
-
-
-
-
-
-
-
diff --git a/js/search.js b/js/search.js
deleted file mode 100644
index a7e359548..000000000
--- a/js/search.js
+++ /dev/null
@@ -1,173 +0,0 @@
-// Search module for phpDocumentor
-//
-// This module is a wrapper around fuse.js that will use a given index and attach itself to a
-// search form and to a search results pane identified by the following data attributes:
-//
-// 1. data-search-form
-// 2. data-search-results
-//
-// The data-search-form is expected to have a single input element of type 'search' that will trigger searching for
-// a series of results, were the data-search-results pane is expected to have a direct UL child that will be populated
-// with rendered results.
-//
-// The search has various stages, upon loading this stage the data-search-form receives the CSS class
-// 'phpdocumentor-search--enabled'; this indicates that JS is allowed and indices are being loaded. It is recommended
-// to hide the form by default and show it when it receives this class to achieve progressive enhancement for this
-// feature.
-//
-// After loading this module, it is expected to load a search index asynchronously, for example:
-//
-//
-//
-// In this script the generated index should attach itself to the search module using the `appendIndex` function. By
-// doing it like this the page will continue loading, unhindered by the loading of the search.
-//
-// After the page has fully loaded, and all these deferred indexes loaded, the initialization of the search module will
-// be called and the form will receive the class 'phpdocumentor-search--active', indicating search is ready. At this
-// point, the input field will also have it's 'disabled' attribute removed.
-var Search = (function () {
- var fuse;
- var index = [];
- var options = {
- shouldSort: true,
- threshold: 0.6,
- location: 0,
- distance: 100,
- maxPatternLength: 32,
- minMatchCharLength: 1,
- keys: [
- "fqsen",
- "name",
- "summary",
- "url"
- ]
- };
-
- // Credit David Walsh (https://davidwalsh.name/javascript-debounce-function)
- // Returns a function, that, as long as it continues to be invoked, will not
- // be triggered. The function will be called after it stops being called for
- // N milliseconds. If `immediate` is passed, trigger the function on the
- // leading edge, instead of the trailing.
- function debounce(func, wait, immediate) {
- var timeout;
-
- return function executedFunction() {
- var context = this;
- var args = arguments;
-
- var later = function () {
- timeout = null;
- if (!immediate) func.apply(context, args);
- };
-
- var callNow = immediate && !timeout;
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- if (callNow) func.apply(context, args);
- };
- }
-
- function close() {
- // Start scroll prevention: https://css-tricks.com/prevent-page-scrolling-when-a-modal-is-open/
- const scrollY = document.body.style.top;
- document.body.style.position = '';
- document.body.style.top = '';
- window.scrollTo(0, parseInt(scrollY || '0') * -1);
- // End scroll prevention
-
- var form = document.querySelector('[data-search-form]');
- var searchResults = document.querySelector('[data-search-results]');
-
- form.classList.toggle('phpdocumentor-search--has-results', false);
- searchResults.classList.add('phpdocumentor-search-results--hidden');
- var searchField = document.querySelector('[data-search-form] input[type="search"]');
- searchField.blur();
- }
-
- function search(event) {
- // Start scroll prevention: https://css-tricks.com/prevent-page-scrolling-when-a-modal-is-open/
- document.body.style.position = 'fixed';
- document.body.style.top = `-${window.scrollY}px`;
- // End scroll prevention
-
- // prevent enter's from autosubmitting
- event.stopPropagation();
-
- var form = document.querySelector('[data-search-form]');
- var searchResults = document.querySelector('[data-search-results]');
- var searchResultEntries = document.querySelector('[data-search-results] .phpdocumentor-search-results__entries');
-
- searchResultEntries.innerHTML = '';
-
- if (!event.target.value) {
- close();
- return;
- }
-
- form.classList.toggle('phpdocumentor-search--has-results', true);
- searchResults.classList.remove('phpdocumentor-search-results--hidden');
- var results = fuse.search(event.target.value, {limit: 25});
-
- results.forEach(function (result) {
- var entry = document.createElement("li");
- entry.classList.add("phpdocumentor-search-results__entry");
- entry.innerHTML += '\n";
- entry.innerHTML += '' + result.fqsen + " \n";
- entry.innerHTML += '' + result.summary + '
';
- searchResultEntries.appendChild(entry)
- });
- }
-
- function appendIndex(added) {
- index = index.concat(added);
-
- // re-initialize search engine when appending an index after initialisation
- if (typeof fuse !== 'undefined') {
- fuse = new Fuse(index, options);
- }
- }
-
- function init() {
- fuse = new Fuse(index, options);
-
- var form = document.querySelector('[data-search-form]');
- var searchField = document.querySelector('[data-search-form] input[type="search"]');
-
- var closeButton = document.querySelector('.phpdocumentor-search-results__close');
- closeButton.addEventListener('click', function() { close() }.bind(this));
-
- var searchResults = document.querySelector('[data-search-results]');
- searchResults.addEventListener('click', function() { close() }.bind(this));
-
- form.classList.add('phpdocumentor-search--active');
-
- searchField.setAttribute('placeholder', 'Search (Press "/" to focus)');
- searchField.removeAttribute('disabled');
- searchField.addEventListener('keyup', debounce(search, 300));
-
- window.addEventListener('keyup', function (event) {
- if (event.key === '/') {
- searchField.focus();
- }
- if (event.code === 'Escape') {
- close();
- }
- }.bind(this));
- }
-
- return {
- appendIndex,
- init
- }
-})();
-
-window.addEventListener('DOMContentLoaded', function () {
- var form = document.querySelector('[data-search-form]');
-
- // When JS is supported; show search box. Must be before including the search for it to take effect immediately
- form.classList.add('phpdocumentor-search--enabled');
-});
-
-window.addEventListener('load', function () {
- Search.init();
-});
diff --git a/js/searchIndex.js b/js/searchIndex.js
deleted file mode 100644
index df43f8b01..000000000
--- a/js/searchIndex.js
+++ /dev/null
@@ -1,1709 +0,0 @@
-Search.appendIndex(
- [
- {
- "fqsen": "\\chillerlan\\QRCode\\Data\\AlphaNum",
- "name": "AlphaNum",
- "summary": "Alphanumeric\u0020mode\u003A\u00200\u0020to\u00209,\u0020A\u0020to\u0020Z,\u0020space,\u0020\u0024\u0020\u0025\u0020\u002A\u0020\u002B\u0020\u002D\u0020.\u0020\/\u0020\u003A",
- "url": "classes/chillerlan-QRCode-Data-AlphaNum.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\AlphaNum\u003A\u003Awrite\u0028\u0029",
- "name": "write",
- "summary": "writes\u0020the\u0020actual\u0020data\u0020string\u0020to\u0020the\u0020BitBuffer",
- "url": "classes/chillerlan-QRCode-Data-AlphaNum.html#method_write"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\AlphaNum\u003A\u003AgetCharCode\u0028\u0029",
- "name": "getCharCode",
- "summary": "get\u0020the\u0020code\u0020for\u0020the\u0020given\u0020character",
- "url": "classes/chillerlan-QRCode-Data-AlphaNum.html#method_getCharCode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\AlphaNum\u003A\u003A\u0024datamode",
- "name": "datamode",
- "summary": "the\u0020current\u0020data\u0020mode\u003A\u0020Num,\u0020Alphanum,\u0020Kanji,\u0020Byte",
- "url": "classes/chillerlan-QRCode-Data-AlphaNum.html#property_datamode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\AlphaNum\u003A\u003A\u0024lengthBits",
- "name": "lengthBits",
- "summary": "mode\u0020length\u0020bits\u0020for\u0020the\u0020version\u0020breakpoints\u00201\u002D9,\u002010\u002D26\u0020and\u002027\u002D40",
- "url": "classes/chillerlan-QRCode-Data-AlphaNum.html#property_lengthBits"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Byte",
- "name": "Byte",
- "summary": "Byte\u0020mode,\u0020ISO\u002D8859\u002D1\u0020or\u0020UTF\u002D8",
- "url": "classes/chillerlan-QRCode-Data-Byte.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Byte\u003A\u003Awrite\u0028\u0029",
- "name": "write",
- "summary": "writes\u0020the\u0020actual\u0020data\u0020string\u0020to\u0020the\u0020BitBuffer",
- "url": "classes/chillerlan-QRCode-Data-Byte.html#method_write"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Byte\u003A\u003A\u0024datamode",
- "name": "datamode",
- "summary": "the\u0020current\u0020data\u0020mode\u003A\u0020Num,\u0020Alphanum,\u0020Kanji,\u0020Byte",
- "url": "classes/chillerlan-QRCode-Data-Byte.html#property_datamode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Byte\u003A\u003A\u0024lengthBits",
- "name": "lengthBits",
- "summary": "mode\u0020length\u0020bits\u0020for\u0020the\u0020version\u0020breakpoints\u00201\u002D9,\u002010\u002D26\u0020and\u002027\u002D40",
- "url": "classes/chillerlan-QRCode-Data-Byte.html#property_lengthBits"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Kanji",
- "name": "Kanji",
- "summary": "Kanji\u0020mode\u003A\u0020double\u002Dbyte\u0020characters\u0020from\u0020the\u0020Shift\u0020JIS\u0020character\u0020set",
- "url": "classes/chillerlan-QRCode-Data-Kanji.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Kanji\u003A\u003AgetLength\u0028\u0029",
- "name": "getLength",
- "summary": "returns\u0020the\u0020byte\u0020count\u0020of\u0020the\u0020\u0024data\u0020string",
- "url": "classes/chillerlan-QRCode-Data-Kanji.html#method_getLength"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Kanji\u003A\u003Awrite\u0028\u0029",
- "name": "write",
- "summary": "writes\u0020the\u0020actual\u0020data\u0020string\u0020to\u0020the\u0020BitBuffer",
- "url": "classes/chillerlan-QRCode-Data-Kanji.html#method_write"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Kanji\u003A\u003A\u0024datamode",
- "name": "datamode",
- "summary": "the\u0020current\u0020data\u0020mode\u003A\u0020Num,\u0020Alphanum,\u0020Kanji,\u0020Byte",
- "url": "classes/chillerlan-QRCode-Data-Kanji.html#property_datamode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Kanji\u003A\u003A\u0024lengthBits",
- "name": "lengthBits",
- "summary": "mode\u0020length\u0020bits\u0020for\u0020the\u0020version\u0020breakpoints\u00201\u002D9,\u002010\u002D26\u0020and\u002027\u002D40",
- "url": "classes/chillerlan-QRCode-Data-Kanji.html#property_lengthBits"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\MaskPatternTester",
- "name": "MaskPatternTester",
- "summary": "Receives\u0020a\u0020QRDataInterface\u0020object\u0020and\u0020runs\u0020the\u0020mask\u0020pattern\u0020tests\u0020on\u0020it.",
- "url": "classes/chillerlan-QRCode-Data-MaskPatternTester.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\MaskPatternTester\u003A\u003A__construct\u0028\u0029",
- "name": "__construct",
- "summary": "Receives\u0020the\u0020QRDataInterface",
- "url": "classes/chillerlan-QRCode-Data-MaskPatternTester.html#method___construct"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\MaskPatternTester\u003A\u003AgetBestMaskPattern\u0028\u0029",
- "name": "getBestMaskPattern",
- "summary": "shoves\u0020a\u0020QRMatrix\u0020through\u0020the\u0020MaskPatternTester\u0020to\u0020find\u0020the\u0020lowest\u0020penalty\u0020mask\u0020pattern",
- "url": "classes/chillerlan-QRCode-Data-MaskPatternTester.html#method_getBestMaskPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\MaskPatternTester\u003A\u003AtestPattern\u0028\u0029",
- "name": "testPattern",
- "summary": "Returns\u0020the\u0020penalty\u0020for\u0020the\u0020given\u0020mask\u0020pattern",
- "url": "classes/chillerlan-QRCode-Data-MaskPatternTester.html#method_testPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\MaskPatternTester\u003A\u003AtestLevel1\u0028\u0029",
- "name": "testLevel1",
- "summary": "Checks\u0020for\u0020each\u0020group\u0020of\u0020five\u0020or\u0020more\u0020same\u002Dcolored\u0020modules\u0020in\u0020a\u0020row\u0020\u0028or\u0020column\u0029",
- "url": "classes/chillerlan-QRCode-Data-MaskPatternTester.html#method_testLevel1"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\MaskPatternTester\u003A\u003AtestLevel2\u0028\u0029",
- "name": "testLevel2",
- "summary": "Checks\u0020for\u0020each\u00202x2\u0020area\u0020of\u0020same\u002Dcolored\u0020modules\u0020in\u0020the\u0020matrix",
- "url": "classes/chillerlan-QRCode-Data-MaskPatternTester.html#method_testLevel2"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\MaskPatternTester\u003A\u003AtestLevel3\u0028\u0029",
- "name": "testLevel3",
- "summary": "Checks\u0020if\u0020there\u0020are\u0020patterns\u0020that\u0020look\u0020similar\u0020to\u0020the\u0020finder\u0020patterns\u0020\u00281\u003A1\u003A3\u003A1\u003A1\u0020ratio\u0029",
- "url": "classes/chillerlan-QRCode-Data-MaskPatternTester.html#method_testLevel3"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\MaskPatternTester\u003A\u003AtestLevel4\u0028\u0029",
- "name": "testLevel4",
- "summary": "Checks\u0020if\u0020more\u0020than\u0020half\u0020of\u0020the\u0020modules\u0020are\u0020dark\u0020or\u0020light,\u0020with\u0020a\u0020larger\u0020penalty\u0020for\u0020a\u0020larger\u0020difference",
- "url": "classes/chillerlan-QRCode-Data-MaskPatternTester.html#method_testLevel4"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\MaskPatternTester\u003A\u003A\u0024dataInterface",
- "name": "dataInterface",
- "summary": "The\u0020data\u0020interface\u0020that\u0020contains\u0020the\u0020data\u0020matrix\u0020to\u0020test",
- "url": "classes/chillerlan-QRCode-Data-MaskPatternTester.html#property_dataInterface"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Number",
- "name": "Number",
- "summary": "Numeric\u0020mode\u003A\u0020decimal\u0020digits\u00200\u0020to\u00209",
- "url": "classes/chillerlan-QRCode-Data-Number.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Number\u003A\u003Awrite\u0028\u0029",
- "name": "write",
- "summary": "writes\u0020the\u0020actual\u0020data\u0020string\u0020to\u0020the\u0020BitBuffer",
- "url": "classes/chillerlan-QRCode-Data-Number.html#method_write"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Number\u003A\u003AparseInt\u0028\u0029",
- "name": "parseInt",
- "summary": "get\u0020the\u0020code\u0020for\u0020the\u0020given\u0020numeric\u0020string",
- "url": "classes/chillerlan-QRCode-Data-Number.html#method_parseInt"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Number\u003A\u003A\u0024datamode",
- "name": "datamode",
- "summary": "the\u0020current\u0020data\u0020mode\u003A\u0020Num,\u0020Alphanum,\u0020Kanji,\u0020Byte",
- "url": "classes/chillerlan-QRCode-Data-Number.html#property_datamode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\Number\u003A\u003A\u0024lengthBits",
- "name": "lengthBits",
- "summary": "mode\u0020length\u0020bits\u0020for\u0020the\u0020version\u0020breakpoints\u00201\u002D9,\u002010\u002D26\u0020and\u002027\u002D40",
- "url": "classes/chillerlan-QRCode-Data-Number.html#property_lengthBits"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRCodeDataException",
- "name": "QRCodeDataException",
- "summary": "An\u0020exception\u0020container",
- "url": "classes/chillerlan-QRCode-Data-QRCodeDataException.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract",
- "name": "QRDataAbstract",
- "summary": "Processes\u0020the\u0020binary\u0020data\u0020and\u0020maps\u0020it\u0020on\u0020a\u0020matrix\u0020which\u0020is\u0020then\u0020being\u0020returned",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003A__construct\u0028\u0029",
- "name": "__construct",
- "summary": "QRDataInterface\u0020constructor.",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#method___construct"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003AsetData\u0028\u0029",
- "name": "setData",
- "summary": "Sets\u0020the\u0020data\u0020string\u0020\u0028internally\u0020called\u0020by\u0020the\u0020constructor\u0029",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#method_setData"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003AinitMatrix\u0028\u0029",
- "name": "initMatrix",
- "summary": "returns\u0020a\u0020fresh\u0020matrix\u0020object\u0020with\u0020the\u0020data\u0020written\u0020for\u0020the\u0020given\u0020\u0024maskPattern",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#method_initMatrix"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003AgetLengthBits\u0028\u0029",
- "name": "getLengthBits",
- "summary": "returns\u0020the\u0020length\u0020bits\u0020for\u0020the\u0020version\u0020breakpoints\u00201\u002D9,\u002010\u002D26\u0020and\u002027\u002D40",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#method_getLengthBits"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003AgetLength\u0028\u0029",
- "name": "getLength",
- "summary": "returns\u0020the\u0020byte\u0020count\u0020of\u0020the\u0020\u0024data\u0020string",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#method_getLength"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003AgetMinimumVersion\u0028\u0029",
- "name": "getMinimumVersion",
- "summary": "returns\u0020the\u0020minimum\u0020version\u0020number\u0020for\u0020the\u0020given\u0020string",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#method_getMinimumVersion"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003Awrite\u0028\u0029",
- "name": "write",
- "summary": "writes\u0020the\u0020actual\u0020data\u0020string\u0020to\u0020the\u0020BitBuffer",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#method_write"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003AwriteBitBuffer\u0028\u0029",
- "name": "writeBitBuffer",
- "summary": "creates\u0020a\u0020BitBuffer\u0020and\u0020writes\u0020the\u0020string\u0020data\u0020to\u0020it",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#method_writeBitBuffer"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003AmaskECC\u0028\u0029",
- "name": "maskECC",
- "summary": "ECC\u0020masking",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#method_maskECC"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003Apoly\u0028\u0029",
- "name": "poly",
- "summary": "helper\u0020method\u0020for\u0020the\u0020polynomial\u0020operations",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#method_poly"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003A\u0024strlen",
- "name": "strlen",
- "summary": "the\u0020string\u0020byte\u0020count",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#property_strlen"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003A\u0024datamode",
- "name": "datamode",
- "summary": "the\u0020current\u0020data\u0020mode\u003A\u0020Num,\u0020Alphanum,\u0020Kanji,\u0020Byte",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#property_datamode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003A\u0024lengthBits",
- "name": "lengthBits",
- "summary": "mode\u0020length\u0020bits\u0020for\u0020the\u0020version\u0020breakpoints\u00201\u002D9,\u002010\u002D26\u0020and\u002027\u002D40",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#property_lengthBits"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003A\u0024version",
- "name": "version",
- "summary": "current\u0020QR\u0020Code\u0020version",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#property_version"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003A\u0024ecdata",
- "name": "ecdata",
- "summary": "ECC\u0020temp\u0020data",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#property_ecdata"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003A\u0024dcdata",
- "name": "dcdata",
- "summary": "ECC\u0020temp\u0020data",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#property_dcdata"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003A\u0024options",
- "name": "options",
- "summary": "the\u0020options\u0020instance",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#property_options"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataAbstract\u003A\u003A\u0024bitBuffer",
- "name": "bitBuffer",
- "summary": "a\u0020BitBuffer\u0020instance",
- "url": "classes/chillerlan-QRCode-Data-QRDataAbstract.html#property_bitBuffer"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataInterface",
- "name": "QRDataInterface",
- "summary": "Specifies\u0020the\u0020methods\u0020reqired\u0020for\u0020the\u0020data\u0020modules\u0020\u0028Number,\u0020Alphanum,\u0020Byte\u0020and\u0020Kanji\u0029\nand\u0020holds\u0020version\u0020information\u0020in\u0020several\u0020constants",
- "url": "classes/chillerlan-QRCode-Data-QRDataInterface.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataInterface\u003A\u003AsetData\u0028\u0029",
- "name": "setData",
- "summary": "Sets\u0020the\u0020data\u0020string\u0020\u0028internally\u0020called\u0020by\u0020the\u0020constructor\u0029",
- "url": "classes/chillerlan-QRCode-Data-QRDataInterface.html#method_setData"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataInterface\u003A\u003AinitMatrix\u0028\u0029",
- "name": "initMatrix",
- "summary": "returns\u0020a\u0020fresh\u0020matrix\u0020object\u0020with\u0020the\u0020data\u0020written\u0020for\u0020the\u0020given\u0020\u0024maskPattern",
- "url": "classes/chillerlan-QRCode-Data-QRDataInterface.html#method_initMatrix"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataInterface\u003A\u003ACHAR_MAP_NUMBER",
- "name": "CHAR_MAP_NUMBER",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRDataInterface.html#constant_CHAR_MAP_NUMBER"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataInterface\u003A\u003ACHAR_MAP_ALPHANUM",
- "name": "CHAR_MAP_ALPHANUM",
- "summary": "ISO\/IEC\u002018004\u003A2000\u0020Table\u00205",
- "url": "classes/chillerlan-QRCode-Data-QRDataInterface.html#constant_CHAR_MAP_ALPHANUM"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataInterface\u003A\u003AMAX_LENGTH",
- "name": "MAX_LENGTH",
- "summary": "ISO\/IEC\u002018004\u003A2000\u0020Tables\u00207\u002D11\u0020\u002D\u0020Number\u0020of\u0020symbol\u0020characters\u0020and\u0020input\u0020data\u0020capacity\u0020for\u0020versions\u00201\u0020to\u002040",
- "url": "classes/chillerlan-QRCode-Data-QRDataInterface.html#constant_MAX_LENGTH"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataInterface\u003A\u003AMAX_BITS",
- "name": "MAX_BITS",
- "summary": "ISO\/IEC\u002018004\u003A2000\u0020Tables\u00207\u002D11\u0020\u002D\u0020Number\u0020of\u0020symbol\u0020characters\u0020and\u0020input\u0020data\u0020capacity\u0020for\u0020versions\u00201\u0020to\u002040",
- "url": "classes/chillerlan-QRCode-Data-QRDataInterface.html#constant_MAX_BITS"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRDataInterface\u003A\u003ARSBLOCKS",
- "name": "RSBLOCKS",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRDataInterface.html#constant_RSBLOCKS"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix",
- "name": "QRMatrix",
- "summary": "Holds\u0020a\u0020numerical\u0020representation\u0020of\u0020the\u0020final\u0020QR\u0020Code\u003B\nmaps\u0020the\u0020ECC\u0020coded\u0020binary\u0020data\u0020and\u0020applies\u0020the\u0020mask\u0020pattern",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003A__construct\u0028\u0029",
- "name": "__construct",
- "summary": "QRMatrix\u0020constructor.",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method___construct"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003Ainit\u0028\u0029",
- "name": "init",
- "summary": "shortcut\u0020to\u0020initialize\u0020the\u0020matrix",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_init"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003A\u0024matrix",
- "name": "matrix",
- "summary": "the\u0020actual\u0020matrix\u0020data\u0020array",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#property_matrix"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003A\u0024version",
- "name": "version",
- "summary": "the\u0020current\u0020QR\u0020Code\u0020version\u0020number",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#property_version"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AeccLevel\u0028\u0029",
- "name": "eccLevel",
- "summary": "Returns\u0020the\u0020current\u0020ECC\u0020level",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_eccLevel"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003A\u0024maskPattern",
- "name": "maskPattern",
- "summary": "the\u0020used\u0020mask\u0020pattern,\u0020set\u0020via\u0020QRMatrix\u003A\u003AmapData\u0028\u0029",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#property_maskPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003Asize\u0028\u0029",
- "name": "size",
- "summary": "Returns\u0020the\u0020absoulute\u0020size\u0020of\u0020the\u0020matrix,\u0020including\u0020quiet\u0020zone\u0020\u0028after\u0020setting\u0020it\u0029.",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_size"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003Aget\u0028\u0029",
- "name": "get",
- "summary": "Returns\u0020the\u0020value\u0020of\u0020the\u0020module\u0020at\u0020position\u0020\u005B\u0024x,\u0020\u0024y\u005D",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_get"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003Aset\u0028\u0029",
- "name": "set",
- "summary": "Sets\u0020the\u0020\u0024M_TYPE\u0020value\u0020for\u0020the\u0020module\u0020at\u0020position\u0020\u005B\u0024x,\u0020\u0024y\u005D",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_set"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003Acheck\u0028\u0029",
- "name": "check",
- "summary": "Checks\u0020whether\u0020a\u0020module\u0020is\u0020true\u0020\u0028dark\u0029\u0020or\u0020false\u0020\u0028light\u0029",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_check"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AsetDarkModule\u0028\u0029",
- "name": "setDarkModule",
- "summary": "Sets\u0020the\u0020\u0022dark\u0020module\u0022,\u0020that\u0020is\u0020always\u0020on\u0020the\u0020same\u0020position\u00201x1px\u0020away\u0020from\u0020the\u0020bottom\u0020left\u0020finder",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_setDarkModule"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AsetFinderPattern\u0028\u0029",
- "name": "setFinderPattern",
- "summary": "Draws\u0020the\u00207x7\u0020finder\u0020patterns\u0020in\u0020the\u0020corners\u0020top\u0020left\/right\u0020and\u0020bottom\u0020left",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_setFinderPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AsetSeparators\u0028\u0029",
- "name": "setSeparators",
- "summary": "Draws\u0020the\u0020separator\u0020lines\u0020around\u0020the\u0020finder\u0020patterns",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_setSeparators"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AsetAlignmentPattern\u0028\u0029",
- "name": "setAlignmentPattern",
- "summary": "Draws\u0020the\u00205x5\u0020alignment\u0020patterns",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_setAlignmentPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AsetTimingPattern\u0028\u0029",
- "name": "setTimingPattern",
- "summary": "Draws\u0020the\u0020timing\u0020pattern\u0020\u0028h\/v\u0020checkered\u0020line\u0020between\u0020the\u0020finder\u0020patterns\u0029",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_setTimingPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AsetVersionNumber\u0028\u0029",
- "name": "setVersionNumber",
- "summary": "Draws\u0020the\u0020version\u0020information,\u00202x\u00203x6\u0020pixel",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_setVersionNumber"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AsetFormatInfo\u0028\u0029",
- "name": "setFormatInfo",
- "summary": "Draws\u0020the\u0020format\u0020info\u0020along\u0020the\u0020finder\u0020patterns",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_setFormatInfo"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AsetQuietZone\u0028\u0029",
- "name": "setQuietZone",
- "summary": "Draws\u0020the\u0020\u0022quiet\u0020zone\u0022\u0020of\u0020\u0024size\u0020around\u0020the\u0020matrix",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_setQuietZone"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AsetLogoSpace\u0028\u0029",
- "name": "setLogoSpace",
- "summary": "Clears\u0020a\u0020space\u0020of\u0020\u0024width\u0020\u002A\u0020\u0024height\u0020in\u0020order\u0020to\u0020add\u0020a\u0020logo\u0020or\u0020text.",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_setLogoSpace"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AmapData\u0028\u0029",
- "name": "mapData",
- "summary": "Maps\u0020the\u0020binary\u0020\u0024data\u0020array\u0020from\u0020QRDataInterface\u003A\u003AmaskECC\u0028\u0029\u0020on\u0020the\u0020matrix,\nmasking\u0020the\u0020data\u0020using\u0020\u0024maskPattern\u0020\u0028ISO\/IEC\u002018004\u003A2000\u0020Section\u00208.8\u0029",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#method_mapData"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_NULL",
- "name": "M_NULL",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_NULL"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_DARKMODULE",
- "name": "M_DARKMODULE",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_DARKMODULE"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_DATA",
- "name": "M_DATA",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_DATA"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_FINDER",
- "name": "M_FINDER",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_FINDER"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_SEPARATOR",
- "name": "M_SEPARATOR",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_SEPARATOR"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_ALIGNMENT",
- "name": "M_ALIGNMENT",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_ALIGNMENT"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_TIMING",
- "name": "M_TIMING",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_TIMING"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_FORMAT",
- "name": "M_FORMAT",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_FORMAT"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_VERSION",
- "name": "M_VERSION",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_VERSION"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_QUIETZONE",
- "name": "M_QUIETZONE",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_QUIETZONE"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_LOGO",
- "name": "M_LOGO",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_LOGO"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_FINDER_DOT",
- "name": "M_FINDER_DOT",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_FINDER_DOT"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AM_TEST",
- "name": "M_TEST",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_M_TEST"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AalignmentPattern",
- "name": "alignmentPattern",
- "summary": "ISO\/IEC\u002018004\u003A2000\u0020Annex\u0020E,\u0020Table\u0020E.1\u0020\u002D\u0020Row\/column\u0020coordinates\u0020of\u0020center\u0020module\u0020of\u0020Alignment\u0020Patterns",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_alignmentPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AversionPattern",
- "name": "versionPattern",
- "summary": "ISO\/IEC\u002018004\u003A2000\u0020Annex\u0020D,\u0020Table\u0020D.1\u0020\u002D\u0020Version\u0020information\u0020bit\u0020stream\u0020for\u0020each\u0020version",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_versionPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003AformatPattern",
- "name": "formatPattern",
- "summary": "ISO\/IEC\u002018004\u003A2000\u0020Section\u00208.9\u0020\u002D\u0020Format\u0020Information",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#constant_formatPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003A\u0024eclevel",
- "name": "eclevel",
- "summary": "the\u0020current\u0020ECC\u0020level",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#property_eclevel"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data\\QRMatrix\u003A\u003A\u0024moduleCount",
- "name": "moduleCount",
- "summary": "the\u0020size\u0020\u0028side\u0020length\u0029\u0020of\u0020the\u0020matrix",
- "url": "classes/chillerlan-QRCode-Data-QRMatrix.html#property_moduleCount"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\BitBuffer",
- "name": "BitBuffer",
- "summary": "Holds\u0020the\u0020raw\u0020binary\u0020data",
- "url": "classes/chillerlan-QRCode-Helpers-BitBuffer.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\BitBuffer\u003A\u003Aclear\u0028\u0029",
- "name": "clear",
- "summary": "clears\u0020the\u0020buffer",
- "url": "classes/chillerlan-QRCode-Helpers-BitBuffer.html#method_clear"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\BitBuffer\u003A\u003Aput\u0028\u0029",
- "name": "put",
- "summary": "appends\u0020a\u0020sequence\u0020of\u0020bits",
- "url": "classes/chillerlan-QRCode-Helpers-BitBuffer.html#method_put"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\BitBuffer\u003A\u003AputBit\u0028\u0029",
- "name": "putBit",
- "summary": "appends\u0020a\u0020single\u0020bit",
- "url": "classes/chillerlan-QRCode-Helpers-BitBuffer.html#method_putBit"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\BitBuffer\u003A\u003AgetLength\u0028\u0029",
- "name": "getLength",
- "summary": "returns\u0020the\u0020current\u0020buffer\u0020length",
- "url": "classes/chillerlan-QRCode-Helpers-BitBuffer.html#method_getLength"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\BitBuffer\u003A\u003AgetBuffer\u0028\u0029",
- "name": "getBuffer",
- "summary": "returns\u0020the\u0020buffer\u0020content",
- "url": "classes/chillerlan-QRCode-Helpers-BitBuffer.html#method_getBuffer"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\BitBuffer\u003A\u003A\u0024buffer",
- "name": "buffer",
- "summary": "The\u0020buffer\u0020content",
- "url": "classes/chillerlan-QRCode-Helpers-BitBuffer.html#property_buffer"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\BitBuffer\u003A\u003A\u0024length",
- "name": "length",
- "summary": "Length\u0020of\u0020the\u0020content\u0020\u0028bits\u0029",
- "url": "classes/chillerlan-QRCode-Helpers-BitBuffer.html#property_length"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\Polynomial",
- "name": "Polynomial",
- "summary": "Polynomial\u0020long\u0020division\u0020helpers",
- "url": "classes/chillerlan-QRCode-Helpers-Polynomial.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\Polynomial\u003A\u003A__construct\u0028\u0029",
- "name": "__construct",
- "summary": "Polynomial\u0020constructor.",
- "url": "classes/chillerlan-QRCode-Helpers-Polynomial.html#method___construct"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\Polynomial\u003A\u003AgetNum\u0028\u0029",
- "name": "getNum",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Helpers-Polynomial.html#method_getNum"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\Polynomial\u003A\u003AsetNum\u0028\u0029",
- "name": "setNum",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Helpers-Polynomial.html#method_setNum"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\Polynomial\u003A\u003Amultiply\u0028\u0029",
- "name": "multiply",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Helpers-Polynomial.html#method_multiply"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\Polynomial\u003A\u003Amod\u0028\u0029",
- "name": "mod",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Helpers-Polynomial.html#method_mod"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\Polynomial\u003A\u003Aglog\u0028\u0029",
- "name": "glog",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Helpers-Polynomial.html#method_glog"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\Polynomial\u003A\u003Agexp\u0028\u0029",
- "name": "gexp",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Helpers-Polynomial.html#method_gexp"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\Polynomial\u003A\u003Atable",
- "name": "table",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Helpers-Polynomial.html#constant_table"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers\\Polynomial\u003A\u003A\u0024num",
- "name": "num",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Helpers-Polynomial.html#property_num"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRCodeOutputException",
- "name": "QRCodeOutputException",
- "summary": "An\u0020exception\u0020container",
- "url": "classes/chillerlan-QRCode-Output-QRCodeOutputException.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRFpdf",
- "name": "QRFpdf",
- "summary": "QRFpdf\u0020output\u0020module\u0020\u0028requires\u0020fpdf\u0029",
- "url": "classes/chillerlan-QRCode-Output-QRFpdf.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRFpdf\u003A\u003A__construct\u0028\u0029",
- "name": "__construct",
- "summary": "QROutputAbstract\u0020constructor.",
- "url": "classes/chillerlan-QRCode-Output-QRFpdf.html#method___construct"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRFpdf\u003A\u003AsetModuleValues\u0028\u0029",
- "name": "setModuleValues",
- "summary": "Sets\u0020the\u0020initial\u0020module\u0020values\u0020\u0028clean\u002Dup\u0020\u0026\u0020defaults\u0029",
- "url": "classes/chillerlan-QRCode-Output-QRFpdf.html#method_setModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRFpdf\u003A\u003Adump\u0028\u0029",
- "name": "dump",
- "summary": "generates\u0020the\u0020output,\u0020optionally\u0020dumps\u0020it\u0020to\u0020a\u0020file,\u0020and\u0020returns\u0020it",
- "url": "classes/chillerlan-QRCode-Output-QRFpdf.html#method_dump"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage",
- "name": "QRImage",
- "summary": "Converts\u0020the\u0020matrix\u0020into\u0020GD\u0020images,\u0020raw\u0020or\u0020base64\u0020output\u0020\u0028requires\u0020ext\u002Dgd\u0029",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003A__construct\u0028\u0029",
- "name": "__construct",
- "summary": "QROutputAbstract\u0020constructor.",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#method___construct"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003AsetModuleValues\u0028\u0029",
- "name": "setModuleValues",
- "summary": "Sets\u0020the\u0020initial\u0020module\u0020values\u0020\u0028clean\u002Dup\u0020\u0026\u0020defaults\u0029",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#method_setModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003Adump\u0028\u0029",
- "name": "dump",
- "summary": "generates\u0020the\u0020output,\u0020optionally\u0020dumps\u0020it\u0020to\u0020a\u0020file,\u0020and\u0020returns\u0020it",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#method_dump"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003AsetPixel\u0028\u0029",
- "name": "setPixel",
- "summary": "Creates\u0020a\u0020single\u0020QR\u0020pixel\u0020with\u0020the\u0020given\u0020settings",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#method_setPixel"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003AdumpImage\u0028\u0029",
- "name": "dumpImage",
- "summary": "Creates\u0020the\u0020final\u0020image\u0020by\u0020calling\u0020the\u0020desired\u0020GD\u0020output\u0020function",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#method_dumpImage"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003Apng\u0028\u0029",
- "name": "png",
- "summary": "PNG\u0020output",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#method_png"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003Agif\u0028\u0029",
- "name": "gif",
- "summary": "Jiff\u0020\u002D\u0020like...\u0020JitHub\u0021",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#method_gif"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003Ajpg\u0028\u0029",
- "name": "jpg",
- "summary": "JPG\u0020output",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#method_jpg"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003ATRANSPARENCY_TYPES",
- "name": "TRANSPARENCY_TYPES",
- "summary": "GD\u0020image\u0020types\u0020that\u0020support\u0020transparency",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#constant_TRANSPARENCY_TYPES"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003A\u0024defaultMode",
- "name": "defaultMode",
- "summary": "the\u0020default\u0020output\u0020mode\u0020of\u0020the\u0020current\u0020output\u0020module",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#property_defaultMode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImage\u003A\u003A\u0024image",
- "name": "image",
- "summary": "The\u0020GD\u0020image\u0020resource",
- "url": "classes/chillerlan-QRCode-Output-QRImage.html#property_image"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImagick",
- "name": "QRImagick",
- "summary": "ImageMagick\u0020output\u0020module\u0020\u0028requires\u0020ext\u002Dimagick\u0029",
- "url": "classes/chillerlan-QRCode-Output-QRImagick.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImagick\u003A\u003A__construct\u0028\u0029",
- "name": "__construct",
- "summary": "QROutputAbstract\u0020constructor.",
- "url": "classes/chillerlan-QRCode-Output-QRImagick.html#method___construct"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImagick\u003A\u003AsetModuleValues\u0028\u0029",
- "name": "setModuleValues",
- "summary": "Sets\u0020the\u0020initial\u0020module\u0020values\u0020\u0028clean\u002Dup\u0020\u0026\u0020defaults\u0029",
- "url": "classes/chillerlan-QRCode-Output-QRImagick.html#method_setModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImagick\u003A\u003Adump\u0028\u0029",
- "name": "dump",
- "summary": "generates\u0020the\u0020output,\u0020optionally\u0020dumps\u0020it\u0020to\u0020a\u0020file,\u0020and\u0020returns\u0020it",
- "url": "classes/chillerlan-QRCode-Output-QRImagick.html#method_dump"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImagick\u003A\u003AdrawImage\u0028\u0029",
- "name": "drawImage",
- "summary": "Creates\u0020the\u0020QR\u0020image\u0020via\u0020ImagickDraw",
- "url": "classes/chillerlan-QRCode-Output-QRImagick.html#method_drawImage"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRImagick\u003A\u003A\u0024imagick",
- "name": "imagick",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Output-QRImagick.html#property_imagick"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRMarkup",
- "name": "QRMarkup",
- "summary": "Converts\u0020the\u0020matrix\u0020into\u0020markup\u0020types\u003A\u0020HTML,\u0020SVG,\u0020.",
- "url": "classes/chillerlan-QRCode-Output-QRMarkup.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRMarkup\u003A\u003AsetModuleValues\u0028\u0029",
- "name": "setModuleValues",
- "summary": "Sets\u0020the\u0020initial\u0020module\u0020values\u0020\u0028clean\u002Dup\u0020\u0026\u0020defaults\u0029",
- "url": "classes/chillerlan-QRCode-Output-QRMarkup.html#method_setModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRMarkup\u003A\u003Ahtml\u0028\u0029",
- "name": "html",
- "summary": "HTML\u0020output",
- "url": "classes/chillerlan-QRCode-Output-QRMarkup.html#method_html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRMarkup\u003A\u003Asvg\u0028\u0029",
- "name": "svg",
- "summary": "SVG\u0020output",
- "url": "classes/chillerlan-QRCode-Output-QRMarkup.html#method_svg"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRMarkup\u003A\u003A\u0024defaultMode",
- "name": "defaultMode",
- "summary": "the\u0020default\u0020output\u0020mode\u0020of\u0020the\u0020current\u0020output\u0020module",
- "url": "classes/chillerlan-QRCode-Output-QRMarkup.html#property_defaultMode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRMarkup\u003A\u003A\u0024svgHeader",
- "name": "svgHeader",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Output-QRMarkup.html#property_svgHeader"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract",
- "name": "QROutputAbstract",
- "summary": "common\u0020output\u0020abstract",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003A__construct\u0028\u0029",
- "name": "__construct",
- "summary": "QROutputAbstract\u0020constructor.",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#method___construct"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003AsetModuleValues\u0028\u0029",
- "name": "setModuleValues",
- "summary": "Sets\u0020the\u0020initial\u0020module\u0020values\u0020\u0028clean\u002Dup\u0020\u0026\u0020defaults\u0029",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#method_setModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003AsaveToFile\u0028\u0029",
- "name": "saveToFile",
- "summary": "saves\u0020the\u0020qr\u0020data\u0020to\u0020a\u0020file",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#method_saveToFile"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003Adump\u0028\u0029",
- "name": "dump",
- "summary": "generates\u0020the\u0020output,\u0020optionally\u0020dumps\u0020it\u0020to\u0020a\u0020file,\u0020and\u0020returns\u0020it",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#method_dump"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003A\u0024moduleCount",
- "name": "moduleCount",
- "summary": "the\u0020current\u0020size\u0020of\u0020the\u0020QR\u0020matrix",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#property_moduleCount"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003A\u0024outputMode",
- "name": "outputMode",
- "summary": "the\u0020current\u0020output\u0020mode",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#property_outputMode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003A\u0024defaultMode",
- "name": "defaultMode",
- "summary": "the\u0020default\u0020output\u0020mode\u0020of\u0020the\u0020current\u0020output\u0020module",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#property_defaultMode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003A\u0024scale",
- "name": "scale",
- "summary": "the\u0020current\u0020scaling\u0020for\u0020a\u0020QR\u0020pixel",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#property_scale"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003A\u0024length",
- "name": "length",
- "summary": "the\u0020side\u0020length\u0020of\u0020the\u0020QR\u0020image\u0020\u0028modules\u0020\u002A\u0020scale\u0029",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#property_length"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003A\u0024moduleValues",
- "name": "moduleValues",
- "summary": "an\u0020\u0028optional\u0029\u0020array\u0020of\u0020color\u0020values\u0020for\u0020the\u0020several\u0020QR\u0020matrix\u0020parts",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#property_moduleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003A\u0024matrix",
- "name": "matrix",
- "summary": "the\u0020\u0028filled\u0029\u0020data\u0020matrix\u0020object",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#property_matrix"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputAbstract\u003A\u003A\u0024options",
- "name": "options",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Output-QROutputAbstract.html#property_options"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputInterface",
- "name": "QROutputInterface",
- "summary": "Converts\u0020the\u0020data\u0020matrix\u0020into\u0020readable\u0020output",
- "url": "classes/chillerlan-QRCode-Output-QROutputInterface.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputInterface\u003A\u003Adump\u0028\u0029",
- "name": "dump",
- "summary": "generates\u0020the\u0020output,\u0020optionally\u0020dumps\u0020it\u0020to\u0020a\u0020file,\u0020and\u0020returns\u0020it",
- "url": "classes/chillerlan-QRCode-Output-QROutputInterface.html#method_dump"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QROutputInterface\u003A\u003ADEFAULT_MODULE_VALUES",
- "name": "DEFAULT_MODULE_VALUES",
- "summary": "",
- "url": "classes/chillerlan-QRCode-Output-QROutputInterface.html#constant_DEFAULT_MODULE_VALUES"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRString",
- "name": "QRString",
- "summary": "Converts\u0020the\u0020matrix\u0020data\u0020into\u0020string\u0020types",
- "url": "classes/chillerlan-QRCode-Output-QRString.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRString\u003A\u003AsetModuleValues\u0028\u0029",
- "name": "setModuleValues",
- "summary": "Sets\u0020the\u0020initial\u0020module\u0020values\u0020\u0028clean\u002Dup\u0020\u0026\u0020defaults\u0029",
- "url": "classes/chillerlan-QRCode-Output-QRString.html#method_setModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRString\u003A\u003Atext\u0028\u0029",
- "name": "text",
- "summary": "string\u0020output",
- "url": "classes/chillerlan-QRCode-Output-QRString.html#method_text"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRString\u003A\u003Ajson\u0028\u0029",
- "name": "json",
- "summary": "JSON\u0020output",
- "url": "classes/chillerlan-QRCode-Output-QRString.html#method_json"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output\\QRString\u003A\u003A\u0024defaultMode",
- "name": "defaultMode",
- "summary": "the\u0020default\u0020output\u0020mode\u0020of\u0020the\u0020current\u0020output\u0020module",
- "url": "classes/chillerlan-QRCode-Output-QRString.html#property_defaultMode"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode",
- "name": "QRCode",
- "summary": "Turns\u0020a\u0020text\u0020string\u0020into\u0020a\u0020Model\u00202\u0020QR\u0020Code",
- "url": "classes/chillerlan-QRCode-QRCode.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003A__construct\u0028\u0029",
- "name": "__construct",
- "summary": "QRCode\u0020constructor.",
- "url": "classes/chillerlan-QRCode-QRCode.html#method___construct"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003Arender\u0028\u0029",
- "name": "render",
- "summary": "Renders\u0020a\u0020QR\u0020Code\u0020for\u0020the\u0020given\u0020\u0024data\u0020and\u0020QROptions",
- "url": "classes/chillerlan-QRCode-QRCode.html#method_render"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AgetMatrix\u0028\u0029",
- "name": "getMatrix",
- "summary": "Returns\u0020a\u0020QRMatrix\u0020object\u0020for\u0020the\u0020given\u0020\u0024data\u0020and\u0020current\u0020QROptions",
- "url": "classes/chillerlan-QRCode-QRCode.html#method_getMatrix"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AinitDataInterface\u0028\u0029",
- "name": "initDataInterface",
- "summary": "returns\u0020a\u0020fresh\u0020QRDataInterface\u0020for\u0020the\u0020given\u0020\u0024data",
- "url": "classes/chillerlan-QRCode-QRCode.html#method_initDataInterface"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AinitOutputInterface\u0028\u0029",
- "name": "initOutputInterface",
- "summary": "returns\u0020a\u0020fresh\u0020\u0028built\u002Din\u0029\u0020QROutputInterface",
- "url": "classes/chillerlan-QRCode-QRCode.html#method_initOutputInterface"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AisNumber\u0028\u0029",
- "name": "isNumber",
- "summary": "checks\u0020if\u0020a\u0020string\u0020qualifies\u0020as\u0020numeric",
- "url": "classes/chillerlan-QRCode-QRCode.html#method_isNumber"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AisAlphaNum\u0028\u0029",
- "name": "isAlphaNum",
- "summary": "checks\u0020if\u0020a\u0020string\u0020qualifies\u0020as\u0020alphanumeric",
- "url": "classes/chillerlan-QRCode-QRCode.html#method_isAlphaNum"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AcheckString\u0028\u0029",
- "name": "checkString",
- "summary": "checks\u0020is\u0020a\u0020given\u0020\u0024string\u0020matches\u0020the\u0020characters\u0020of\u0020a\u0020given\u0020\u0024charmap,\u0020returns\u0020false\u0020on\u0020the\u0020first\u0020invalid\u0020occurence.",
- "url": "classes/chillerlan-QRCode-QRCode.html#method_checkString"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AisKanji\u0028\u0029",
- "name": "isKanji",
- "summary": "checks\u0020if\u0020a\u0020string\u0020qualifies\u0020as\u0020Kanji",
- "url": "classes/chillerlan-QRCode-QRCode.html#method_isKanji"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AisByte\u0028\u0029",
- "name": "isByte",
- "summary": "a\u0020dummy",
- "url": "classes/chillerlan-QRCode-QRCode.html#method_isByte"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AVERSION_AUTO",
- "name": "VERSION_AUTO",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_VERSION_AUTO"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AMASK_PATTERN_AUTO",
- "name": "MASK_PATTERN_AUTO",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_MASK_PATTERN_AUTO"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003ADATA_NUMBER",
- "name": "DATA_NUMBER",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_DATA_NUMBER"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003ADATA_ALPHANUM",
- "name": "DATA_ALPHANUM",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_DATA_ALPHANUM"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003ADATA_BYTE",
- "name": "DATA_BYTE",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_DATA_BYTE"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003ADATA_KANJI",
- "name": "DATA_KANJI",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_DATA_KANJI"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003ADATA_MODES",
- "name": "DATA_MODES",
- "summary": "References\u0020to\u0020the\u0020keys\u0020of\u0020the\u0020following\u0020tables\u003A",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_DATA_MODES"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AECC_L",
- "name": "ECC_L",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_ECC_L"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AECC_M",
- "name": "ECC_M",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_ECC_M"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AECC_Q",
- "name": "ECC_Q",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_ECC_Q"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AECC_H",
- "name": "ECC_H",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_ECC_H"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AECC_MODES",
- "name": "ECC_MODES",
- "summary": "References\u0020to\u0020the\u0020keys\u0020of\u0020the\u0020following\u0020tables\u003A",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_ECC_MODES"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_MARKUP_HTML",
- "name": "OUTPUT_MARKUP_HTML",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_MARKUP_HTML"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_MARKUP_SVG",
- "name": "OUTPUT_MARKUP_SVG",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_MARKUP_SVG"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_IMAGE_PNG",
- "name": "OUTPUT_IMAGE_PNG",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_IMAGE_PNG"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_IMAGE_JPG",
- "name": "OUTPUT_IMAGE_JPG",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_IMAGE_JPG"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_IMAGE_GIF",
- "name": "OUTPUT_IMAGE_GIF",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_IMAGE_GIF"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_STRING_JSON",
- "name": "OUTPUT_STRING_JSON",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_STRING_JSON"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_STRING_TEXT",
- "name": "OUTPUT_STRING_TEXT",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_STRING_TEXT"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_IMAGICK",
- "name": "OUTPUT_IMAGICK",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_IMAGICK"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_FPDF",
- "name": "OUTPUT_FPDF",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_FPDF"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_CUSTOM",
- "name": "OUTPUT_CUSTOM",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_CUSTOM"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003AOUTPUT_MODES",
- "name": "OUTPUT_MODES",
- "summary": "Map\u0020of\u0020built\u002Din\u0020output\u0020modules\u0020\u003D\u003E\u0020capabilities",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_OUTPUT_MODES"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003ADATA_INTERFACES",
- "name": "DATA_INTERFACES",
- "summary": "Map\u0020of\u0020data\u0020mode\u0020\u003D\u003E\u0020interface",
- "url": "classes/chillerlan-QRCode-QRCode.html#constant_DATA_INTERFACES"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003A\u0024options",
- "name": "options",
- "summary": "The\u0020settings\u0020container",
- "url": "classes/chillerlan-QRCode-QRCode.html#property_options"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCode\u003A\u003A\u0024dataInterface",
- "name": "dataInterface",
- "summary": "The\u0020selected\u0020data\u0020interface\u0020\u0028Number,\u0020AlphaNum,\u0020Kanji,\u0020Byte\u0029",
- "url": "classes/chillerlan-QRCode-QRCode.html#property_dataInterface"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QRCodeException",
- "name": "QRCodeException",
- "summary": "An\u0020exception\u0020container",
- "url": "classes/chillerlan-QRCode-QRCodeException.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptions",
- "name": "QROptions",
- "summary": "The\u0020QRCode\u0020settings\u0020container",
- "url": "classes/chillerlan-QRCode-QROptions.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait",
- "name": "QROptionsTrait",
- "summary": "The\u0020QRCode\u0020plug\u002Din\u0020settings\u0020\u0026\u0020setter\u0020functionality",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003AsetMinMaxVersion\u0028\u0029",
- "name": "setMinMaxVersion",
- "summary": "clamp\u0020min\/max\u0020version\u0020number",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#method_setMinMaxVersion"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003Aset_versionMin\u0028\u0029",
- "name": "set_versionMin",
- "summary": "sets\u0020the\u0020minimum\u0020version\u0020number",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#method_set_versionMin"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003Aset_versionMax\u0028\u0029",
- "name": "set_versionMax",
- "summary": "sets\u0020the\u0020maximum\u0020version\u0020number",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#method_set_versionMax"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003Aset_eccLevel\u0028\u0029",
- "name": "set_eccLevel",
- "summary": "sets\u0020the\u0020error\u0020correction\u0020level",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#method_set_eccLevel"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003Aset_maskPattern\u0028\u0029",
- "name": "set_maskPattern",
- "summary": "sets\/clamps\u0020the\u0020mask\u0020pattern",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#method_set_maskPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003Aset_imageTransparencyBG\u0028\u0029",
- "name": "set_imageTransparencyBG",
- "summary": "sets\u0020the\u0020transparency\u0020background\u0020color",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#method_set_imageTransparencyBG"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003Aset_version\u0028\u0029",
- "name": "set_version",
- "summary": "sets\/clamps\u0020the\u0020version\u0020number",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#method_set_version"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003Aset_fpdfMeasureUnit\u0028\u0029",
- "name": "set_fpdfMeasureUnit",
- "summary": "sets\u0020the\u0020FPDF\u0020measurement\u0020unit",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#method_set_fpdfMeasureUnit"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024version",
- "name": "version",
- "summary": "QR\u0020Code\u0020version\u0020number",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_version"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024versionMin",
- "name": "versionMin",
- "summary": "Minimum\u0020QR\u0020version",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_versionMin"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024versionMax",
- "name": "versionMax",
- "summary": "Maximum\u0020QR\u0020version",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_versionMax"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024eccLevel",
- "name": "eccLevel",
- "summary": "Error\u0020correct\u0020level",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_eccLevel"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024maskPattern",
- "name": "maskPattern",
- "summary": "Mask\u0020Pattern\u0020to\u0020use",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_maskPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024addQuietzone",
- "name": "addQuietzone",
- "summary": "Add\u0020a\u0020\u0022quiet\u0020zone\u0022\u0020\u0028margin\u0029\u0020according\u0020to\u0020the\u0020QR\u0020code\u0020spec",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_addQuietzone"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024quietzoneSize",
- "name": "quietzoneSize",
- "summary": "Size\u0020of\u0020the\u0020quiet\u0020zone",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_quietzoneSize"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024dataModeOverride",
- "name": "dataModeOverride",
- "summary": "Use\u0020this\u0020to\u0020circumvent\u0020the\u0020data\u0020mode\u0020detection\u0020and\u0020force\u0020the\u0020usage\u0020of\u0020the\u0020given\u0020mode.",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_dataModeOverride"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024outputType",
- "name": "outputType",
- "summary": "The\u0020output\u0020type",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_outputType"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024outputInterface",
- "name": "outputInterface",
- "summary": "the\u0020FQCN\u0020of\u0020the\u0020custom\u0020QROutputInterface\u0020if\u0020\u0024outputType\u0020is\u0020set\u0020to\u0020QRCode\u003A\u003AOUTPUT_CUSTOM",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_outputInterface"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024cachefile",
- "name": "cachefile",
- "summary": "\/path\/to\/cache.file",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_cachefile"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024eol",
- "name": "eol",
- "summary": "newline\u0020string\u0020\u005BHTML,\u0020SVG,\u0020TEXT\u005D",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_eol"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024scale",
- "name": "scale",
- "summary": "size\u0020of\u0020a\u0020QR\u0020code\u0020pixel\u0020\u005BSVG,\u0020IMAGE_\u002A\u005D,\u0020HTML\u0020via\u0020CSS",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_scale"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024cssClass",
- "name": "cssClass",
- "summary": "a\u0020common\u0020css\u0020class",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_cssClass"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024svgOpacity",
- "name": "svgOpacity",
- "summary": "SVG\u0020opacity",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_svgOpacity"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024svgDefs",
- "name": "svgDefs",
- "summary": "anything\u0020between\u0020\u003Cdefs\u003E",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_svgDefs"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024svgViewBoxSize",
- "name": "svgViewBoxSize",
- "summary": "SVG\u0020viewBox\u0020size.\u0020a\u0020single\u0020integer\u0020number\u0020which\u0020defines\u0020width\/height\u0020of\u0020the\u0020viewBox\u0020attribute.",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_svgViewBoxSize"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024textDark",
- "name": "textDark",
- "summary": "string\u0020substitute\u0020for\u0020dark",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_textDark"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024textLight",
- "name": "textLight",
- "summary": "string\u0020substitute\u0020for\u0020light",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_textLight"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024markupDark",
- "name": "markupDark",
- "summary": "markup\u0020substitute\u0020for\u0020dark\u0020\u0028CSS\u0020value\u0029",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_markupDark"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024markupLight",
- "name": "markupLight",
- "summary": "markup\u0020substitute\u0020for\u0020light\u0020\u0028CSS\u0020value\u0029",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_markupLight"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024returnResource",
- "name": "returnResource",
- "summary": "Return\u0020the\u0020image\u0020resource\u0020instead\u0020of\u0020a\u0020render\u0020if\u0020applicable.",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_returnResource"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024imageBase64",
- "name": "imageBase64",
- "summary": "toggle\u0020base64\u0020or\u0020raw\u0020image\u0020data",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_imageBase64"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024imageTransparent",
- "name": "imageTransparent",
- "summary": "toggle\u0020transparency,\u0020not\u0020supported\u0020by\u0020jpg",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_imageTransparent"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024imageTransparencyBG",
- "name": "imageTransparencyBG",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_imageTransparencyBG"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024pngCompression",
- "name": "pngCompression",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_pngCompression"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024jpegQuality",
- "name": "jpegQuality",
- "summary": "",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_jpegQuality"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024imagickFormat",
- "name": "imagickFormat",
- "summary": "Imagick\u0020output\u0020format",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_imagickFormat"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024imagickBG",
- "name": "imagickBG",
- "summary": "Imagick\u0020background\u0020color\u0020\u0028defaults\u0020to\u0020\u0022transparent\u0022\u0029",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_imagickBG"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024fpdfMeasureUnit",
- "name": "fpdfMeasureUnit",
- "summary": "Measurement\u0020unit\u0020for\u0020FPDF\u0020output\u003A\u0020pt,\u0020mm,\u0020cm,\u0020in\u0020\u0028defaults\u0020to\u0020\u0022pt\u0022\u0029",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_fpdfMeasureUnit"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\QROptionsTrait\u003A\u003A\u0024moduleValues",
- "name": "moduleValues",
- "summary": "Module\u0020values\u0020map",
- "url": "classes/chillerlan-QRCode-QROptionsTrait.html#property_moduleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\AlphaNumTest",
- "name": "AlphaNumTest",
- "summary": "Tests\u0020the\u0020AlphaNum\u0020class",
- "url": "classes/chillerlan-QRCodeTest-Data-AlphaNumTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\AlphaNumTest\u003A\u003AtestGetCharCodeException\u0028\u0029",
- "name": "testGetCharCodeException",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020an\u0020invalid\u0020character\u0020is\u0020encountered",
- "url": "classes/chillerlan-QRCodeTest-Data-AlphaNumTest.html#method_testGetCharCodeException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\ByteTest",
- "name": "ByteTest",
- "summary": "Tests\u0020the\u0020Byte\u0020class",
- "url": "classes/chillerlan-QRCodeTest-Data-ByteTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\DatainterfaceTestAbstract",
- "name": "DatainterfaceTestAbstract",
- "summary": "The\u0020data\u0020interface\u0020test\u0020abstract",
- "url": "classes/chillerlan-QRCodeTest-Data-DatainterfaceTestAbstract.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\DatainterfaceTestAbstract\u003A\u003AtestInstance\u0028\u0029",
- "name": "testInstance",
- "summary": "Verifies\u0020the\u0020data\u0020interface\u0020instance",
- "url": "classes/chillerlan-QRCodeTest-Data-DatainterfaceTestAbstract.html#method_testInstance"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\DatainterfaceTestAbstract\u003A\u003AtestMaskEcc\u0028\u0029",
- "name": "testMaskEcc",
- "summary": "Tests\u0020ecc\u0020masking\u0020and\u0020verifies\u0020against\u0020a\u0020sample",
- "url": "classes/chillerlan-QRCodeTest-Data-DatainterfaceTestAbstract.html#method_testMaskEcc"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\DatainterfaceTestAbstract\u003A\u003AtestInitMatrix\u0028\u0029",
- "name": "testInitMatrix",
- "summary": "Tests\u0020initializing\u0020the\u0020data\u0020matrix",
- "url": "classes/chillerlan-QRCodeTest-Data-DatainterfaceTestAbstract.html#method_testInitMatrix"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\DatainterfaceTestAbstract\u003A\u003AtestGetMinimumVersion\u0028\u0029",
- "name": "testGetMinimumVersion",
- "summary": "Tests\u0020getting\u0020the\u0020minimum\u0020QR\u0020version\u0020for\u0020the\u0020given\u0020data",
- "url": "classes/chillerlan-QRCodeTest-Data-DatainterfaceTestAbstract.html#method_testGetMinimumVersion"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\DatainterfaceTestAbstract\u003A\u003AtestGetMinimumVersionException\u0028\u0029",
- "name": "testGetMinimumVersionException",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020the\u0020data\u0020exceeds\u0020the\u0020maximum\u0020version\u0020while\u0020auto\u0020detecting",
- "url": "classes/chillerlan-QRCodeTest-Data-DatainterfaceTestAbstract.html#method_testGetMinimumVersionException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\DatainterfaceTestAbstract\u003A\u003AtestCodeLengthOverflowException\u0028\u0029",
- "name": "testCodeLengthOverflowException",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020on\u0020data\u0020overflow",
- "url": "classes/chillerlan-QRCodeTest-Data-DatainterfaceTestAbstract.html#method_testCodeLengthOverflowException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\KanjiTest",
- "name": "KanjiTest",
- "summary": "Tests\u0020the\u0020Kanji\u0020class",
- "url": "classes/chillerlan-QRCodeTest-Data-KanjiTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\KanjiTest\u003A\u003AtestIllegalCharException1\u0028\u0029",
- "name": "testIllegalCharException1",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020an\u0020invalid\u0020character\u0020is\u0020encountered",
- "url": "classes/chillerlan-QRCodeTest-Data-KanjiTest.html#method_testIllegalCharException1"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\KanjiTest\u003A\u003AtestIllegalCharException2\u0028\u0029",
- "name": "testIllegalCharException2",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020an\u0020invalid\u0020character\u0020is\u0020encountered",
- "url": "classes/chillerlan-QRCodeTest-Data-KanjiTest.html#method_testIllegalCharException2"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\MaskPatternTesterTest",
- "name": "MaskPatternTesterTest",
- "summary": "MaskPatternTester\u0020coverage\u0020test",
- "url": "classes/chillerlan-QRCodeTest-Data-MaskPatternTesterTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\MaskPatternTesterTest\u003A\u003AtestMaskpattern\u0028\u0029",
- "name": "testMaskpattern",
- "summary": "Tests\u0020getting\u0020the\u0020best\u0020mask\u0020pattern",
- "url": "classes/chillerlan-QRCodeTest-Data-MaskPatternTesterTest.html#method_testMaskpattern"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\MaskPatternTesterTest\u003A\u003AtestMaskpatternID\u0028\u0029",
- "name": "testMaskpatternID",
- "summary": "Tests\u0020getting\u0020the\u0020penalty\u0020value\u0020for\u0020a\u0020given\u0020mask\u0020pattern",
- "url": "classes/chillerlan-QRCodeTest-Data-MaskPatternTesterTest.html#method_testMaskpatternID"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\NumberTest",
- "name": "NumberTest",
- "summary": "Tests\u0020the\u0020Number\u0020class",
- "url": "classes/chillerlan-QRCodeTest-Data-NumberTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\NumberTest\u003A\u003AtestGetCharCodeException\u0028\u0029",
- "name": "testGetCharCodeException",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020an\u0020invalid\u0020character\u0020is\u0020encountered",
- "url": "classes/chillerlan-QRCodeTest-Data-NumberTest.html#method_testGetCharCodeException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest",
- "name": "QRMatrixTest",
- "summary": "Tests\u0020the\u0020QRMatix\u0020class",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestInstance\u0028\u0029",
- "name": "testInstance",
- "summary": "Validates\u0020the\u0020QRMatrix\u0020instance",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testInstance"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestInvalidVersionException\u0028\u0029",
- "name": "testInvalidVersionException",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020an\u0020invalid\u0020QR\u0020version\u0020was\u0020given",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testInvalidVersionException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestInvalidEccException\u0028\u0029",
- "name": "testInvalidEccException",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020an\u0020invalid\u0020ECC\u0020level\u0020was\u0020given",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testInvalidEccException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSize\u0028\u0029",
- "name": "testSize",
- "summary": "Tests\u0020if\u0020size\u0028\u0029\u0020returns\u0020the\u0020actual\u0020matrix\u0020size\/count",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSize"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestVersion\u0028\u0029",
- "name": "testVersion",
- "summary": "Tests\u0020if\u0020version\u0028\u0029\u0020returns\u0020the\u0020current\u0020\u0028given\u0029\u0020version",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testVersion"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestECC\u0028\u0029",
- "name": "testECC",
- "summary": "Tests\u0020if\u0020eccLevel\u0028\u0029\u0020returns\u0020the\u0020current\u0020\u0028given\u0029\u0020ECC\u0020level",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testECC"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestMaskPattern\u0028\u0029",
- "name": "testMaskPattern",
- "summary": "Tests\u0020if\u0020maskPattern\u0028\u0029\u0020returns\u0020the\u0020current\u0020\u0028or\u0020default\u0029\u0020mask\u0020pattern",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testMaskPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestGetSetCheck\u0028\u0029",
- "name": "testGetSetCheck",
- "summary": "Tests\u0020the\u0020set\u0028\u0029,\u0020get\u0028\u0029\u0020and\u0020check\u0028\u0029\u0020methods",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testGetSetCheck"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetDarkModule\u0028\u0029",
- "name": "testSetDarkModule",
- "summary": "Tests\u0020setting\u0020the\u0020dark\u0020module\u0020and\u0020verifies\u0020its\u0020position",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetDarkModule"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetFinderPattern\u0028\u0029",
- "name": "testSetFinderPattern",
- "summary": "Tests\u0020setting\u0020the\u0020finder\u0020patterns\u0020and\u0020verifies\u0020their\u0020positions",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetFinderPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetSeparators\u0028\u0029",
- "name": "testSetSeparators",
- "summary": "Tests\u0020the\u0020separator\u0020patterns\u0020and\u0020verifies\u0020their\u0020positions",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetSeparators"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetAlignmentPattern\u0028\u0029",
- "name": "testSetAlignmentPattern",
- "summary": "Tests\u0020the\u0020alignment\u0020patterns\u0020and\u0020verifies\u0020their\u0020positions\u0020\u002D\u0020version\u00201\u0020\u0028no\u0020pattern\u0029\u0020skipped",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetAlignmentPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetTimingPattern\u0028\u0029",
- "name": "testSetTimingPattern",
- "summary": "Tests\u0020the\u0020timing\u0020patterns\u0020and\u0020verifies\u0020their\u0020positions",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetTimingPattern"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetVersionNumber\u0028\u0029",
- "name": "testSetVersionNumber",
- "summary": "Tests\u0020the\u0020version\u0020patterns\u0020and\u0020verifies\u0020their\u0020positions\u0020\u002D\u0020version\u0020\u003C\u00207\u0020skipped",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetVersionNumber"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetFormatInfo\u0028\u0029",
- "name": "testSetFormatInfo",
- "summary": "Tests\u0020the\u0020format\u0020patterns\u0020and\u0020verifies\u0020their\u0020positions",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetFormatInfo"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetQuietZone\u0028\u0029",
- "name": "testSetQuietZone",
- "summary": "Tests\u0020the\u0020quiet\u0020zone\u0020pattern\u0020and\u0020verifies\u0020its\u0020position",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetQuietZone"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetQuietZoneException\u0028\u0029",
- "name": "testSetQuietZoneException",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020in\u0020an\u0020attempt\u0020to\u0020create\u0020it\u0020before\u0020data\u0020was\u0020written",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetQuietZoneException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetLogoSpaceOrientation\u0028\u0029",
- "name": "testSetLogoSpaceOrientation",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetLogoSpaceOrientation"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetLogoSpacePosition\u0028\u0029",
- "name": "testSetLogoSpacePosition",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetLogoSpacePosition"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetLogoSpaceInvalidEccException\u0028\u0029",
- "name": "testSetLogoSpaceInvalidEccException",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetLogoSpaceInvalidEccException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data\\QRMatrixTest\u003A\u003AtestSetLogoSpaceMaxSizeException\u0028\u0029",
- "name": "testSetLogoSpaceMaxSizeException",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Data-QRMatrixTest.html#method_testSetLogoSpaceMaxSizeException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\BitBufferTest",
- "name": "BitBufferTest",
- "summary": "BitBuffer\u0020coverage\u0020test",
- "url": "classes/chillerlan-QRCodeTest-Helpers-BitBufferTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\BitBufferTest\u003A\u003AsetUp\u0028\u0029",
- "name": "setUp",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Helpers-BitBufferTest.html#method_setUp"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\BitBufferTest\u003A\u003AbitProvider\u0028\u0029",
- "name": "bitProvider",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Helpers-BitBufferTest.html#method_bitProvider"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\BitBufferTest\u003A\u003AtestPut\u0028\u0029",
- "name": "testPut",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Helpers-BitBufferTest.html#method_testPut"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\BitBufferTest\u003A\u003AtestClear\u0028\u0029",
- "name": "testClear",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Helpers-BitBufferTest.html#method_testClear"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\BitBufferTest\u003A\u003A\u0024bitBuffer",
- "name": "bitBuffer",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Helpers-BitBufferTest.html#property_bitBuffer"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\PolynomialTest",
- "name": "PolynomialTest",
- "summary": "Polynomial\u0020coverage\u0020test",
- "url": "classes/chillerlan-QRCodeTest-Helpers-PolynomialTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\PolynomialTest\u003A\u003AsetUp\u0028\u0029",
- "name": "setUp",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Helpers-PolynomialTest.html#method_setUp"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\PolynomialTest\u003A\u003AtestGexp\u0028\u0029",
- "name": "testGexp",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Helpers-PolynomialTest.html#method_testGexp"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\PolynomialTest\u003A\u003AtestGlogException\u0028\u0029",
- "name": "testGlogException",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Helpers-PolynomialTest.html#method_testGlogException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers\\PolynomialTest\u003A\u003A\u0024polynomial",
- "name": "polynomial",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Helpers-PolynomialTest.html#property_polynomial"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRFpdfTest",
- "name": "QRFpdfTest",
- "summary": "Tests\u0020the\u0020QRFpdf\u0020output\u0020module",
- "url": "classes/chillerlan-QRCodeTest-Output-QRFpdfTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRFpdfTest\u003A\u003AtestSetModuleValues\u0028\u0029",
- "name": "testSetModuleValues",
- "summary": "covers\u0020the\u0020module\u0020values\u0020settings",
- "url": "classes/chillerlan-QRCodeTest-Output-QRFpdfTest.html#method_testSetModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRFpdfTest\u003A\u003AtestRenderImage\u0028\u0029",
- "name": "testRenderImage",
- "summary": "covers\u0020the\u0020built\u002Din\u0020output\u0020modules,\u0020tests\u0020against\u0020pre\u002Drendered\u0020data",
- "url": "classes/chillerlan-QRCodeTest-Output-QRFpdfTest.html#method_testRenderImage"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRFpdfTest\u003A\u003AtestOutputGetResource\u0028\u0029",
- "name": "testOutputGetResource",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Output-QRFpdfTest.html#method_testOutputGetResource"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRImageTest",
- "name": "QRImageTest",
- "summary": "Tests\u0020the\u0020QRImage\u0020output\u0020module",
- "url": "classes/chillerlan-QRCodeTest-Output-QRImageTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRImageTest\u003A\u003AtestSetModuleValues\u0028\u0029",
- "name": "testSetModuleValues",
- "summary": "covers\u0020the\u0020module\u0020values\u0020settings",
- "url": "classes/chillerlan-QRCodeTest-Output-QRImageTest.html#method_testSetModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRImageTest\u003A\u003AtestOutputGetResource\u0028\u0029",
- "name": "testOutputGetResource",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Output-QRImageTest.html#method_testOutputGetResource"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRImagickTest",
- "name": "QRImagickTest",
- "summary": "Tests\u0020the\u0020QRImagick\u0020output\u0020module",
- "url": "classes/chillerlan-QRCodeTest-Output-QRImagickTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRImagickTest\u003A\u003AtestSetModuleValues\u0028\u0029",
- "name": "testSetModuleValues",
- "summary": "covers\u0020the\u0020module\u0020values\u0020settings",
- "url": "classes/chillerlan-QRCodeTest-Output-QRImagickTest.html#method_testSetModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRImagickTest\u003A\u003AtestOutputGetResource\u0028\u0029",
- "name": "testOutputGetResource",
- "summary": "",
- "url": "classes/chillerlan-QRCodeTest-Output-QRImagickTest.html#method_testOutputGetResource"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRMarkupTest",
- "name": "QRMarkupTest",
- "summary": "Tests\u0020the\u0020QRMarkup\u0020output\u0020module",
- "url": "classes/chillerlan-QRCodeTest-Output-QRMarkupTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRMarkupTest\u003A\u003AtestSetModuleValues\u0028\u0029",
- "name": "testSetModuleValues",
- "summary": "covers\u0020the\u0020module\u0020values\u0020settings",
- "url": "classes/chillerlan-QRCodeTest-Output-QRMarkupTest.html#method_testSetModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QROutputTestAbstract",
- "name": "QROutputTestAbstract",
- "summary": "Test\u0020abstract\u0020for\u0020the\u0020several\u0020\u0028built\u002Din\u0029\u0020output\u0020modules,\nshould\u0020also\u0020be\u0020used\u0020to\u0020test\u0020custom\u0020output\u0020modules",
- "url": "classes/chillerlan-QRCodeTest-Output-QROutputTestAbstract.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QROutputTestAbstract\u003A\u003AtestInstance\u0028\u0029",
- "name": "testInstance",
- "summary": "Validate\u0020the\u0020instance\u0020of\u0020the\u0020interface",
- "url": "classes/chillerlan-QRCodeTest-Output-QROutputTestAbstract.html#method_testInstance"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QROutputTestAbstract\u003A\u003AtestSaveException\u0028\u0029",
- "name": "testSaveException",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020trying\u0020to\u0020write\u0020a\u0020cache\u0020file\u0020to\u0020an\u0020invalid\u0020destination",
- "url": "classes/chillerlan-QRCodeTest-Output-QROutputTestAbstract.html#method_testSaveException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QROutputTestAbstract\u003A\u003AtestSetModuleValues\u0028\u0029",
- "name": "testSetModuleValues",
- "summary": "covers\u0020the\u0020module\u0020values\u0020settings",
- "url": "classes/chillerlan-QRCodeTest-Output-QROutputTestAbstract.html#method_testSetModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QROutputTestAbstract\u003A\u003AtestStringOutput\u0028\u0029",
- "name": "testStringOutput",
- "summary": "coverage\u0020of\u0020the\u0020built\u002Din\u0020output\u0020modules",
- "url": "classes/chillerlan-QRCodeTest-Output-QROutputTestAbstract.html#method_testStringOutput"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QROutputTestAbstract\u003A\u003AtestRenderImage\u0028\u0029",
- "name": "testRenderImage",
- "summary": "covers\u0020the\u0020built\u002Din\u0020output\u0020modules,\u0020tests\u0020against\u0020pre\u002Drendered\u0020data",
- "url": "classes/chillerlan-QRCodeTest-Output-QROutputTestAbstract.html#method_testRenderImage"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRStringTest",
- "name": "QRStringTest",
- "summary": "Tests\u0020the\u0020QRString\u0020output\u0020module",
- "url": "classes/chillerlan-QRCodeTest-Output-QRStringTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRStringTest\u003A\u003AtestSetModuleValues\u0028\u0029",
- "name": "testSetModuleValues",
- "summary": "covers\u0020the\u0020module\u0020values\u0020settings",
- "url": "classes/chillerlan-QRCodeTest-Output-QRStringTest.html#method_testSetModuleValues"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output\\QRStringTest\u003A\u003AtestCustomOutput\u0028\u0029",
- "name": "testCustomOutput",
- "summary": "covers\u0020the\u0020custom\u0020output\u0020functionality\u0020via\u0020an\u0020example",
- "url": "classes/chillerlan-QRCodeTest-Output-QRStringTest.html#method_testCustomOutput"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QRCodeTest",
- "name": "QRCodeTest",
- "summary": "Tests\u0020basic\u0020functions\u0020of\u0020the\u0020QRCode\u0020class",
- "url": "classes/chillerlan-QRCodeTest-QRCodeTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QRCodeTest\u003A\u003AtestIsNumber\u0028\u0029",
- "name": "testIsNumber",
- "summary": "isNumber\u0028\u0029\u0020should\u0020pass\u0020on\u0020any\u0020number\u0020and\u0020fail\u0020on\u0020anything\u0020else",
- "url": "classes/chillerlan-QRCodeTest-QRCodeTest.html#method_testIsNumber"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QRCodeTest\u003A\u003AtestIsAlphaNum\u0028\u0029",
- "name": "testIsAlphaNum",
- "summary": "isAlphaNum\u0028\u0029\u0020should\u0020pass\u0020on\u0020the\u002045\u0020defined\u0020characters\u0020and\u0020fail\u0020on\u0020anything\u0020else\u0020\u0028e.g.\u0020lowercase\u0029",
- "url": "classes/chillerlan-QRCodeTest-QRCodeTest.html#method_testIsAlphaNum"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QRCodeTest\u003A\u003AtestIsKanji\u0028\u0029",
- "name": "testIsKanji",
- "summary": "isKanji\u0028\u0029\u0020should\u0020pass\u0020on\u0020Kanji\/SJIS\u0020characters\u0020and\u0020fail\u0020on\u0020everything\u0020else",
- "url": "classes/chillerlan-QRCodeTest-QRCodeTest.html#method_testIsKanji"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QRCodeTest\u003A\u003AtestIsByte\u0028\u0029",
- "name": "testIsByte",
- "summary": "isByte\u0028\u0029\u0020passses\u0020any\u0020binary\u0020string\u0020and\u0020only\u0020fails\u0020on\u0020empty\u0020strings",
- "url": "classes/chillerlan-QRCodeTest-QRCodeTest.html#method_testIsByte"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QRCodeTest\u003A\u003AtestInitDataInterfaceException\u0028\u0029",
- "name": "testInitDataInterfaceException",
- "summary": "tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020an\u0020invalid\u0020\u0028built\u002Din\u0029\u0020output\u0020type\u0020is\u0020specified",
- "url": "classes/chillerlan-QRCodeTest-QRCodeTest.html#method_testInitDataInterfaceException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QRCodeTest\u003A\u003AtestGetMatrixException\u0028\u0029",
- "name": "testGetMatrixException",
- "summary": "tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020trying\u0020to\u0020call\u0020getMatrix\u0028\u0029\u0020without\u0020data\u0020\u0028empty\u0020string,\u0020no\u0020data\u0020set\u0029",
- "url": "classes/chillerlan-QRCodeTest-QRCodeTest.html#method_testGetMatrixException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QRCodeTest\u003A\u003AtestAvoidTrimming\u0028\u0029",
- "name": "testAvoidTrimming",
- "summary": "test\u0020whether\u0020stings\u0020are\u0020trimmed\u0020\u0028they\u0020are\u0020not\u0029\u0020\u002D\u0020i\u0027m\u0020still\u0020torn\u0020on\u0020that\u0020\u0028see\u0020isByte\u0029",
- "url": "classes/chillerlan-QRCodeTest-QRCodeTest.html#method_testAvoidTrimming"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QRCodeTest\u003A\u003AtestDataModeOverride\u0028\u0029",
- "name": "testDataModeOverride",
- "summary": "tests\u0020if\u0020the\u0020data\u0020mode\u0020is\u0020overriden\u0020if\u0020QROptions\u003A\u003A\u0024dataModeOverride\u0020is\u0020set\u0020to\u0020a\u0020valid\u0020value",
- "url": "classes/chillerlan-QRCodeTest-QRCodeTest.html#method_testDataModeOverride"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QRCodeTest\u003A\u003AtestDataModeOverrideError\u0028\u0029",
- "name": "testDataModeOverrideError",
- "summary": "tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020an\u0020invalid\u0020character\u0020occurs\u0020when\u0020forcing\u0020a\u0020data\u0020mode\u0020other\u0020than\u0020Byte",
- "url": "classes/chillerlan-QRCodeTest-QRCodeTest.html#method_testDataModeOverrideError"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QROptionsTest",
- "name": "QROptionsTest",
- "summary": "QROptions\u0020test",
- "url": "classes/chillerlan-QRCodeTest-QROptionsTest.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QROptionsTest\u003A\u003AtestVersionClamp\u0028\u0029",
- "name": "testVersionClamp",
- "summary": "Tests\u0020the\u0020\u0024version\u0020clamping",
- "url": "classes/chillerlan-QRCodeTest-QROptionsTest.html#method_testVersionClamp"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QROptionsTest\u003A\u003AtestVersionMinMaxClamp\u0028\u0029",
- "name": "testVersionMinMaxClamp",
- "summary": "Tests\u0020the\u0020\u0024versionMin\/\u0024versionMax\u0020clamping",
- "url": "classes/chillerlan-QRCodeTest-QROptionsTest.html#method_testVersionMinMaxClamp"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QROptionsTest\u003A\u003AtestMaskPatternClamp\u0028\u0029",
- "name": "testMaskPatternClamp",
- "summary": "Tests\u0020the\u0020\u0024maskPattern\u0020clamping",
- "url": "classes/chillerlan-QRCodeTest-QROptionsTest.html#method_testMaskPatternClamp"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QROptionsTest\u003A\u003AtestInvalidEccLevelException\u0028\u0029",
- "name": "testInvalidEccLevelException",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020on\u0020an\u0020incorrect\u0020ECC\u0020level",
- "url": "classes/chillerlan-QRCodeTest-QROptionsTest.html#method_testInvalidEccLevelException"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QROptionsTest\u003A\u003AtestClampRGBValues\u0028\u0029",
- "name": "testClampRGBValues",
- "summary": "Tests\u0020clamping\u0020of\u0020the\u0020RGB\u0020values\u0020for\u0020\u0024imageTransparencyBG",
- "url": "classes/chillerlan-QRCodeTest-QROptionsTest.html#method_testClampRGBValues"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\QROptionsTest\u003A\u003AtestInvalidRGBValueException\u0028\u0029",
- "name": "testInvalidRGBValueException",
- "summary": "Tests\u0020if\u0020an\u0020exception\u0020is\u0020thrown\u0020when\u0020a\u0020non\u002Dnumeric\u0020RGB\u0020value\u0020was\u0020encoutered",
- "url": "classes/chillerlan-QRCodeTest-QROptionsTest.html#method_testInvalidRGBValueException"
- }, {
- "fqsen": "\\",
- "name": "\\",
- "summary": "",
- "url": "namespaces/default.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Data",
- "name": "Data",
- "summary": "",
- "url": "namespaces/chillerlan-qrcode-data.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Helpers",
- "name": "Helpers",
- "summary": "",
- "url": "namespaces/chillerlan-qrcode-helpers.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode\\Output",
- "name": "Output",
- "summary": "",
- "url": "namespaces/chillerlan-qrcode-output.html"
- }, {
- "fqsen": "\\chillerlan\\QRCode",
- "name": "QRCode",
- "summary": "",
- "url": "namespaces/chillerlan-qrcode.html"
- }, {
- "fqsen": "\\chillerlan",
- "name": "chillerlan",
- "summary": "",
- "url": "namespaces/chillerlan.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Data",
- "name": "Data",
- "summary": "",
- "url": "namespaces/chillerlan-qrcodetest-data.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Helpers",
- "name": "Helpers",
- "summary": "",
- "url": "namespaces/chillerlan-qrcodetest-helpers.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest\\Output",
- "name": "Output",
- "summary": "",
- "url": "namespaces/chillerlan-qrcodetest-output.html"
- }, {
- "fqsen": "\\chillerlan\\QRCodeTest",
- "name": "QRCodeTest",
- "summary": "",
- "url": "namespaces/chillerlan-qrcodetest.html"
- } ]
-);
diff --git a/namespaces/chillerlan-qrcode-data.html b/namespaces/chillerlan-qrcode-data.html
deleted file mode 100644
index 5b04fdf34..000000000
--- a/namespaces/chillerlan-qrcode-data.html
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Data
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
- QRDataInterface
- Specifies the methods reqired for the data modules (Number, Alphanum, Byte and Kanji)
-and holds version information in several constants
-
- AlphaNum
- Alphanumeric mode: 0 to 9, A to Z, space, $ % * + - . / :
- Byte
- Byte mode, ISO-8859-1 or UTF-8
- Kanji
- Kanji mode: double-byte characters from the Shift JIS character set
- MaskPatternTester
- Receives a QRDataInterface object and runs the mask pattern tests on it.
- Number
- Numeric mode: decimal digits 0 to 9
- QRCodeDataException
- An exception container
- QRDataAbstract
- Processes the binary data and maps it on a matrix which is then being returned
- QRMatrix
- Holds a numerical representation of the final QR Code;
-maps the ECC coded binary data and applies the mask pattern
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/namespaces/chillerlan-qrcode-helpers.html b/namespaces/chillerlan-qrcode-helpers.html
deleted file mode 100644
index efab87962..000000000
--- a/namespaces/chillerlan-qrcode-helpers.html
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Helpers
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- BitBuffer
- Holds the raw binary data
- Polynomial
- Polynomial long division helpers
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/namespaces/chillerlan-qrcode-output.html b/namespaces/chillerlan-qrcode-output.html
deleted file mode 100644
index 4e7c2b2ad..000000000
--- a/namespaces/chillerlan-qrcode-output.html
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Output
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
- QROutputInterface
- Converts the data matrix into readable output
-
- QRCodeOutputException
- An exception container
- QRFpdf
- QRFpdf output module (requires fpdf)
- QRImage
- Converts the matrix into GD images, raw or base64 output (requires ext-gd)
- QRImagick
- ImageMagick output module (requires ext-imagick)
- QRMarkup
- Converts the matrix into markup types: HTML, SVG, .
- QROutputAbstract
- common output abstract
- QRString
- Converts the matrix data into string types
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/namespaces/chillerlan-qrcode.html b/namespaces/chillerlan-qrcode.html
deleted file mode 100644
index 8ffa44162..000000000
--- a/namespaces/chillerlan-qrcode.html
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCode
-
-
-
- Namespaces
-
-
-
-
- Data
- Helpers
- Output
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRCode
- Turns a text string into a Model 2 QR Code
- QRCodeException
- An exception container
- QROptions
- The QRCode settings container
-
- QROptionsTrait
- The QRCode plug-in settings & setter functionality
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/namespaces/chillerlan-qrcodetest-data.html b/namespaces/chillerlan-qrcodetest-data.html
deleted file mode 100644
index e5ccc411f..000000000
--- a/namespaces/chillerlan-qrcodetest-data.html
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/namespaces/chillerlan-qrcodetest-helpers.html b/namespaces/chillerlan-qrcodetest-helpers.html
deleted file mode 100644
index 0291f4fec..000000000
--- a/namespaces/chillerlan-qrcodetest-helpers.html
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Helpers
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- BitBufferTest
- BitBuffer coverage test
- PolynomialTest
- Polynomial coverage test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/namespaces/chillerlan-qrcodetest-output.html b/namespaces/chillerlan-qrcodetest-output.html
deleted file mode 100644
index e28ee12ce..000000000
--- a/namespaces/chillerlan-qrcodetest-output.html
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Output
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRFpdfTest
- Tests the QRFpdf output module
- QRImageTest
- Tests the QRImage output module
- QRImagickTest
- Tests the QRImagick output module
- QRMarkupTest
- Tests the QRMarkup output module
- QROutputTestAbstract
- Test abstract for the several (built-in) output modules,
-should also be used to test custom output modules
- QRStringTest
- Tests the QRString output module
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/namespaces/chillerlan-qrcodetest.html b/namespaces/chillerlan-qrcodetest.html
deleted file mode 100644
index 5d2cbee8b..000000000
--- a/namespaces/chillerlan-qrcodetest.html
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCodeTest
-
-
-
- Namespaces
-
-
-
-
- Data
- Helpers
- Output
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRCodeTest
- Tests basic functions of the QRCode class
- QROptionsTest
- QROptions test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/namespaces/chillerlan.html b/namespaces/chillerlan.html
deleted file mode 100644
index 32f399319..000000000
--- a/namespaces/chillerlan.html
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- chillerlan
-
-
-
- Namespaces
-
-
-
-
- QRCode
- QRCodeTest
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/namespaces/default.html b/namespaces/default.html
deleted file mode 100644
index 0a002965f..000000000
--- a/namespaces/default.html
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- API Documentation
-
-
-
- Namespaces
-
-
-
-
- chillerlan
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/chillerlan-QRCode-Data.html b/packages/chillerlan-QRCode-Data.html
deleted file mode 100644
index 811428c2f..000000000
--- a/packages/chillerlan-QRCode-Data.html
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Data
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
- QRDataInterface
- Specifies the methods reqired for the data modules (Number, Alphanum, Byte and Kanji)
-and holds version information in several constants
-
- AlphaNum
- Alphanumeric mode: 0 to 9, A to Z, space, $ % * + - . / :
- Byte
- Byte mode, ISO-8859-1 or UTF-8
- Kanji
- Kanji mode: double-byte characters from the Shift JIS character set
- MaskPatternTester
- Receives a QRDataInterface object and runs the mask pattern tests on it.
- Number
- Numeric mode: decimal digits 0 to 9
- QRCodeDataException
- An exception container
- QRDataAbstract
- Processes the binary data and maps it on a matrix which is then being returned
- QRMatrix
- Holds a numerical representation of the final QR Code;
-maps the ECC coded binary data and applies the mask pattern
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/chillerlan-QRCode-Helpers.html b/packages/chillerlan-QRCode-Helpers.html
deleted file mode 100644
index 78531b6e6..000000000
--- a/packages/chillerlan-QRCode-Helpers.html
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Helpers
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- BitBuffer
- Holds the raw binary data
- Polynomial
- Polynomial long division helpers
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/chillerlan-QRCode-Output.html b/packages/chillerlan-QRCode-Output.html
deleted file mode 100644
index 8d7ff4220..000000000
--- a/packages/chillerlan-QRCode-Output.html
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Output
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
- QROutputInterface
- Converts the data matrix into readable output
-
- QRCodeOutputException
- An exception container
- QRFpdf
- QRFpdf output module (requires fpdf)
- QRImage
- Converts the matrix into GD images, raw or base64 output (requires ext-gd)
- QRImagick
- ImageMagick output module (requires ext-imagick)
- QRMarkup
- Converts the matrix into markup types: HTML, SVG, .
- QROutputAbstract
- common output abstract
- QRString
- Converts the matrix data into string types
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/chillerlan-QRCode.html b/packages/chillerlan-QRCode.html
deleted file mode 100644
index 616c3c50f..000000000
--- a/packages/chillerlan-QRCode.html
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCode
-
-
- Packages
-
-
-
-
- Data
- Helpers
- Output
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRCode
- Turns a text string into a Model 2 QR Code
- QRCodeException
- An exception container
- QROptions
- The QRCode settings container
-
- QROptionsTrait
- The QRCode plug-in settings & setter functionality
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/chillerlan-QRCodeTest-Data.html b/packages/chillerlan-QRCodeTest-Data.html
deleted file mode 100644
index 6368bf830..000000000
--- a/packages/chillerlan-QRCodeTest-Data.html
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/chillerlan-QRCodeTest-Helpers.html b/packages/chillerlan-QRCodeTest-Helpers.html
deleted file mode 100644
index dbcdfa67e..000000000
--- a/packages/chillerlan-QRCodeTest-Helpers.html
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Helpers
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- BitBufferTest
- BitBuffer coverage test
- PolynomialTest
- Polynomial coverage test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/chillerlan-QRCodeTest-Output.html b/packages/chillerlan-QRCodeTest-Output.html
deleted file mode 100644
index 5b3f2209e..000000000
--- a/packages/chillerlan-QRCodeTest-Output.html
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Output
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRFpdfTest
- Tests the QRFpdf output module
- QRImageTest
- Tests the QRImage output module
- QRImagickTest
- Tests the QRImagick output module
- QRMarkupTest
- Tests the QRMarkup output module
- QROutputTestAbstract
- Test abstract for the several (built-in) output modules,
-should also be used to test custom output modules
- QRStringTest
- Tests the QRString output module
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/chillerlan-QRCodeTest.html b/packages/chillerlan-QRCodeTest.html
deleted file mode 100644
index a9732ccaf..000000000
--- a/packages/chillerlan-QRCodeTest.html
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QRCodeTest
-
-
- Packages
-
-
-
-
- Data
- Helpers
- Output
-
-
-
-
- Interfaces, Classes and Traits
-
-
-
-
-
- QRCodeTest
- Tests basic functions of the QRCode class
- QROptionsTest
- QROptions test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/chillerlan.html b/packages/chillerlan.html
deleted file mode 100644
index 5149dea29..000000000
--- a/packages/chillerlan.html
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- chillerlan
-
-
- Packages
-
-
-
-
- QRCode
- QRCodeTest
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/default.html b/packages/default.html
deleted file mode 100644
index e25139bca..000000000
--- a/packages/default.html
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
- Documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- API Documentation
-
-
- Packages
-
-
-
-
- chillerlan
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/phpdoc.xml b/phpdoc.xml
new file mode 100644
index 000000000..d440f1d8a
--- /dev/null
+++ b/phpdoc.xml
@@ -0,0 +1,20 @@
+
+
+
+ docs
+ utf8
+
+ - TODO
+
+
+
+ docs
+
+
+ src
+ tests
+
+
+
+
+
diff --git a/phpunit.xml b/phpunit.xml
new file mode 100644
index 000000000..1fea31626
--- /dev/null
+++ b/phpunit.xml
@@ -0,0 +1,26 @@
+
+
+
+
+ ./src
+
+
+
+
+
+
+
+
+ ./tests/
+
+
+
+
+
+
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 000000000..d7bf6c891
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,163 @@
+
+
+
+
+
+ QR Code Generator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/qrcode.php b/public/qrcode.php
new file mode 100644
index 000000000..d4e5deb32
--- /dev/null
+++ b/public/qrcode.php
@@ -0,0 +1,96 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodePublic;
+
+use chillerlan\QRCode\QRCode;
+use chillerlan\QRCode\QROptions;
+
+require_once '../vendor/autoload.php';
+
+try{
+
+ $moduleValues = [
+ // finder
+ 1536 => $_POST['m_finder_dark'],
+ 6 => $_POST['m_finder_light'],
+ // alignment
+ 2560 => $_POST['m_alignment_dark'],
+ 10 => $_POST['m_alignment_light'],
+ // timing
+ 3072 => $_POST['m_timing_dark'],
+ 12 => $_POST['m_timing_light'],
+ // format
+ 3584 => $_POST['m_format_dark'],
+ 14 => $_POST['m_format_light'],
+ // version
+ 4096 => $_POST['m_version_dark'],
+ 16 => $_POST['m_version_light'],
+ // data
+ 1024 => $_POST['m_data_dark'],
+ 4 => $_POST['m_data_light'],
+ // darkmodule
+ 512 => $_POST['m_darkmodule_dark'],
+ // separator
+ 8 => $_POST['m_separator_light'],
+ // quietzone
+ 18 => $_POST['m_quietzone_light'],
+ ];
+
+ $moduleValues = array_map(function($v){
+ if(preg_match('/[a-f\d]{6}/i', $v) === 1){
+ return in_array($_POST['output_type'], ['png', 'jpg', 'gif'])
+ ? array_map('hexdec', str_split($v, 2))
+ : '#'.$v ;
+ }
+ return null;
+ }, $moduleValues);
+
+
+ $ecc = in_array($_POST['ecc'], ['L', 'M', 'Q', 'H'], true) ? $_POST['ecc'] : 'L';
+
+ $qro = new QROptions;
+
+ $qro->version = (int)$_POST['version'];
+ $qro->eccLevel = constant('chillerlan\\QRCode\\QRCode::ECC_'.$ecc);
+ $qro->maskPattern = (int)$_POST['maskpattern'];
+ $qro->addQuietzone = isset($_POST['quietzone']);
+ $qro->quietzoneSize = (int)$_POST['quietzonesize'];
+ $qro->moduleValues = $moduleValues;
+ $qro->outputType = $_POST['output_type'];
+ $qro->scale = (int)$_POST['scale'];
+ $qro->imageTransparent = false;
+
+ $qrcode = (new QRCode($qro))->render($_POST['inputstring']);
+
+ if(in_array($_POST['output_type'], ['png', 'jpg', 'gif'])){
+ $qrcode = ' ';
+ }
+ elseif($_POST['output_type'] === 'text'){
+ $qrcode = ''.$qrcode.' ';
+ }
+ elseif($_POST['output_type'] === 'json'){
+ $qrcode = ''.$qrcode.' ';
+ }
+
+ send_response(['qrcode' => $qrcode]);
+}
+// Pokémon exception handler
+catch(\Exception $e){
+ header('HTTP/1.1 500 Internal Server Error');
+ send_response(['error' => $e->getMessage()]);
+}
+
+/**
+ * @param array $response
+ */
+function send_response(array $response){
+ header('Content-type: application/json;charset=utf-8;');
+ echo json_encode($response);
+ exit;
+}
diff --git a/reports/deprecated.html b/reports/deprecated.html
deleted file mode 100644
index 9608e9cbe..000000000
--- a/reports/deprecated.html
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
- Documentation » Deprecated elements
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Deprecated
-
-
-
- No deprecated elements have been found in this project.
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/reports/errors.html b/reports/errors.html
deleted file mode 100644
index d3f804525..000000000
--- a/reports/errors.html
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
- Documentation » Compilation errors
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Errors
-
-
-
No errors have been found in this project.
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/reports/markers.html b/reports/markers.html
deleted file mode 100644
index 26db75ae6..000000000
--- a/reports/markers.html
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
- Documentation » Markers
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Markers
-
-
- No markers have been found in this project.
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Common/BitBuffer.php b/src/Common/BitBuffer.php
new file mode 100644
index 000000000..03d2d2a0d
--- /dev/null
+++ b/src/Common/BitBuffer.php
@@ -0,0 +1,160 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use InvalidArgumentException;
+use function count, floor;
+
+/**
+ * Holds the raw binary data
+ */
+final class BitBuffer{
+
+ /**
+ * The buffer content
+ *
+ * @var int[]
+ */
+ private array $buffer;
+
+ /**
+ * Length of the content (bits)
+ */
+ private int $length;
+
+ private int $bytesRead = 0;
+ private int $bitsRead = 0;
+
+ /**
+ * BitBuffer constructor.
+ */
+ public function __construct(array $bytes = null){
+ $this->buffer = $bytes ?? [];
+ $this->length = count($this->buffer);
+ }
+
+ /**
+ * clears the buffer
+ */
+ public function clear():self{
+ $this->buffer = [];
+ $this->length = 0;
+
+ return $this;
+ }
+
+ /**
+ * appends a sequence of bits
+ */
+ public function put(int $num, int $length):self{
+
+ for($i = 0; $i < $length; $i++){
+ $this->putBit((($num >> ($length - $i - 1)) & 1) === 1);
+ }
+
+ return $this;
+ }
+
+ /**
+ * appends a single bit
+ */
+ public function putBit(bool $bit):self{
+ $bufIndex = (int)floor($this->length / 8);
+
+ if(count($this->buffer) <= $bufIndex){
+ $this->buffer[] = 0;
+ }
+
+ if($bit === true){
+ $this->buffer[$bufIndex] |= (0x80 >> ($this->length % 8));
+ }
+
+ $this->length++;
+
+ return $this;
+ }
+
+ /**
+ * returns the current buffer length
+ */
+ public function getLength():int{
+ return $this->length;
+ }
+
+ /**
+ * returns the buffer content
+ */
+ public function getBuffer():array{
+ return $this->buffer;
+ }
+
+ /**
+ * @return int number of bits that can be read successfully
+ */
+ public function available():int{
+ return 8 * ($this->length - $this->bytesRead) - $this->bitsRead;
+ }
+
+ /**
+ * @author Sean Owen, ZXing
+ *
+ * @param int $numBits number of bits to read
+ *
+ * @return int representing the bits read. The bits will appear as the least-significant
+ * bits of the int
+ * @throws InvalidArgumentException if numBits isn't in [1,32] or more than is available
+ */
+ public function read(int $numBits):int{
+
+ if($numBits < 1 || $numBits > 32 || $numBits > $this->available()){
+ throw new InvalidArgumentException('invalid $numBits: '.$numBits);
+ }
+
+ $result = 0;
+
+ // First, read remainder from current byte
+ if($this->bitsRead > 0){
+ $bitsLeft = 8 - $this->bitsRead;
+ $toRead = $numBits < $bitsLeft ? $numBits : $bitsLeft;
+ $bitsToNotRead = $bitsLeft - $toRead;
+ $mask = (0xff >> (8 - $toRead)) << $bitsToNotRead;
+ $result = ($this->buffer[$this->bytesRead] & $mask) >> $bitsToNotRead;
+ $numBits -= $toRead;
+ $this->bitsRead += $toRead;
+
+ if($this->bitsRead == 8){
+ $this->bitsRead = 0;
+ $this->bytesRead++;
+ }
+ }
+
+ // Next read whole bytes
+ if($numBits > 0){
+
+ while($numBits >= 8){
+ $result = ($result << 8) | ($this->buffer[$this->bytesRead] & 0xff);
+ $this->bytesRead++;
+ $numBits -= 8;
+ }
+
+ // Finally read a partial byte
+ if($numBits > 0){
+ $bitsToNotRead = 8 - $numBits;
+ $mask = (0xff >> $bitsToNotRead) << $bitsToNotRead;
+ $result = ($result << $numBits) | (($this->buffer[$this->bytesRead] & $mask) >> $bitsToNotRead);
+ $this->bitsRead += $numBits;
+ }
+ }
+
+ return $result;
+ }
+
+}
diff --git a/src/Common/ECICharset.php b/src/Common/ECICharset.php
new file mode 100644
index 000000000..9f12bc71c
--- /dev/null
+++ b/src/Common/ECICharset.php
@@ -0,0 +1,118 @@
+
+ * @copyright 2021 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use InvalidArgumentException;
+use function array_key_exists;
+
+/**
+ *
+ */
+final class ECICharset{
+
+ public const CP437 = 0; // Code page 437, DOS Latin US
+ public const ISO_IEC_8859_1_GLI = 1; // GLI encoding with characters 0 to 127 identical to ISO/IEC 646 and characters 128 to 255 identical to ISO 8859-1
+ public const CP437_WO_GLI = 2; // An equivalent code table to CP437, without the return-to-GLI 0 logic
+ public const ISO_IEC_8859_1 = 3; // Latin-1 (Default)
+ public const ISO_IEC_8859_2 = 4; // Latin-2
+ public const ISO_IEC_8859_3 = 5; // Latin-3
+ public const ISO_IEC_8859_4 = 6; // Latin-4
+ public const ISO_IEC_8859_5 = 7; // Latin/Cyrillic
+ public const ISO_IEC_8859_6 = 8; // Latin/Arabic
+ public const ISO_IEC_8859_7 = 9; // Latin/Greek
+ public const ISO_IEC_8859_8 = 10; // Latin/Hebrew
+ public const ISO_IEC_8859_9 = 11; // Latin-5
+ public const ISO_IEC_8859_10 = 12; // Latin-6
+ public const ISO_IEC_8859_11 = 13; // Latin/Thai
+ // 14 reserved
+ public const ISO_IEC_8859_13 = 15; // Latin-7 (Baltic Rim)
+ public const ISO_IEC_8859_14 = 16; // Latin-8 (Celtic)
+ public const ISO_IEC_8859_15 = 17; // Latin-9
+ public const ISO_IEC_8859_16 = 18; // Latin-10
+ // 19 reserved
+ public const SHIFT_JIS = 20; // JIS X 0208 Annex 1 + JIS X 0201
+ public const WINDOWS_1250_LATIN_2 = 21; // Superset of Latin-2, Central Europe
+ public const WINDOWS_1251_CYRILLIC = 22; // Latin/Cyrillic
+ public const WINDOWS_1252_LATIN_1 = 23; // Superset of Latin-1
+ public const WINDOWS_1256_ARABIC = 24;
+ public const ISO_IEC_10646_UCS_2 = 25; // High order byte first (UTF-16BE)
+ public const ISO_IEC_10646_UTF_8 = 26; // UTF-8
+ public const ISO_IEC_646_1991 = 27; // International Reference Version of ISO 7-bit coded character set (US-ASCII)
+ public const BIG5 = 28; // Big 5 (Taiwan) Chinese Character Set
+ public const GB18030 = 29; // GB (PRC) Chinese Character Set
+ public const EUC_KR = 30; // Korean Character Set
+
+ /**
+ * map of charset id -> name
+ *
+ * @see \mb_list_encodings()
+ */
+ public const MB_ENCODINGS = [
+ self::CP437 => null,
+ self::ISO_IEC_8859_1_GLI => null,
+ self::CP437_WO_GLI => null,
+ self::ISO_IEC_8859_1 => 'ISO-8859-1',
+ self::ISO_IEC_8859_2 => 'ISO-8859-2',
+ self::ISO_IEC_8859_3 => 'ISO-8859-3',
+ self::ISO_IEC_8859_4 => 'ISO-8859-4',
+ self::ISO_IEC_8859_5 => 'ISO-8859-5',
+ self::ISO_IEC_8859_6 => 'ISO-8859-6',
+ self::ISO_IEC_8859_7 => 'ISO-8859-7',
+ self::ISO_IEC_8859_8 => 'ISO-8859-8',
+ self::ISO_IEC_8859_9 => 'ISO-8859-9',
+ self::ISO_IEC_8859_10 => 'ISO-8859-10',
+ self::ISO_IEC_8859_11 => null,
+ self::ISO_IEC_8859_13 => 'ISO-8859-13',
+ self::ISO_IEC_8859_14 => 'ISO-8859-14',
+ self::ISO_IEC_8859_15 => 'ISO-8859-15',
+ self::ISO_IEC_8859_16 => 'ISO-8859-16',
+ self::SHIFT_JIS => 'SJIS',
+ self::WINDOWS_1250_LATIN_2 => null, // @see https://www.php.net/manual/en/function.mb-convert-encoding.php#112547
+ self::WINDOWS_1251_CYRILLIC => 'Windows-1251',
+ self::WINDOWS_1252_LATIN_1 => 'Windows-1252',
+ self::WINDOWS_1256_ARABIC => null, // @see https://stackoverflow.com/a/8592995
+ self::ISO_IEC_10646_UCS_2 => 'UTF-16BE',
+ self::ISO_IEC_10646_UTF_8 => 'UTF-8',
+ self::ISO_IEC_646_1991 => 'ASCII',
+ self::BIG5 => 'BIG-5',
+ self::GB18030 => 'GB18030',
+ self::EUC_KR => 'EUC-KR',
+ ];
+
+ private int $charsetID;
+
+ /**
+ *
+ */
+ public function __construct(int $charsetID){
+
+ if(!array_key_exists($charsetID, self::MB_ENCODINGS)){
+ throw new InvalidArgumentException('invalid charset id: '.$charsetID);
+ }
+
+ $this->charsetID = $charsetID;
+ }
+
+ /**
+ *
+ */
+ public function getID():int{
+ return $this->charsetID;
+ }
+
+ /**
+ *
+ */
+ public function getName():?string{
+ return self::MB_ENCODINGS[$this->charsetID];
+ }
+
+}
diff --git a/src/Common/EccLevel.php b/src/Common/EccLevel.php
new file mode 100644
index 000000000..d1f77b2fa
--- /dev/null
+++ b/src/Common/EccLevel.php
@@ -0,0 +1,209 @@
+
+ * @copyright 2020 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use chillerlan\QRCode\QRCodeException;
+
+use function array_column, array_combine, array_keys;
+
+/**
+ *
+ */
+final class EccLevel{
+
+ // ISO/IEC 18004:2000 Tables 12, 25
+
+ /** @var int */
+ public const L = 0b01; // 7%.
+ /** @var int */
+ public const M = 0b00; // 15%.
+ /** @var int */
+ public const Q = 0b11; // 25%.
+ /** @var int */
+ public const H = 0b10; // 30%.
+
+ /**
+ * References to the keys of the following tables:
+ *
+ * @see \chillerlan\QRCode\Common\Version::MAX_BITS
+ * @see \chillerlan\QRCode\Common\EccLevel::RSBLOCKS
+ * @see \chillerlan\QRCode\Common\EccLevel::formatPattern
+ *
+ * @var int[]
+ */
+ public const MODES = [
+ self::L => 0,
+ self::M => 1,
+ self::Q => 2,
+ self::H => 3,
+ ];
+
+ public const MODES_STRING = [
+ self::L => 'L',
+ self::M => 'M',
+ self::Q => 'Q',
+ self::H => 'H',
+ ];
+
+ /**
+ * ISO/IEC 18004:2000 Tables 7-11 - Number of symbol characters and input data capacity for versions 1 to 40
+ *
+ * @var int [][]
+ */
+ private const MAX_BITS = [
+ // v => [ L, M, Q, H] // modules
+ 1 => [ 152, 128, 104, 72], // 21
+ 2 => [ 272, 224, 176, 128], // 25
+ 3 => [ 440, 352, 272, 208], // 29
+ 4 => [ 640, 512, 384, 288], // 33
+ 5 => [ 864, 688, 496, 368], // 37
+ 6 => [ 1088, 864, 608, 480], // 41
+ 7 => [ 1248, 992, 704, 528], // 45
+ 8 => [ 1552, 1232, 880, 688], // 49
+ 9 => [ 1856, 1456, 1056, 800], // 53
+ 10 => [ 2192, 1728, 1232, 976], // 57
+ 11 => [ 2592, 2032, 1440, 1120], // 61
+ 12 => [ 2960, 2320, 1648, 1264], // 65
+ 13 => [ 3424, 2672, 1952, 1440], // 69 NICE!
+ 14 => [ 3688, 2920, 2088, 1576], // 73
+ 15 => [ 4184, 3320, 2360, 1784], // 77
+ 16 => [ 4712, 3624, 2600, 2024], // 81
+ 17 => [ 5176, 4056, 2936, 2264], // 85
+ 18 => [ 5768, 4504, 3176, 2504], // 89
+ 19 => [ 6360, 5016, 3560, 2728], // 93
+ 20 => [ 6888, 5352, 3880, 3080], // 97
+ 21 => [ 7456, 5712, 4096, 3248], // 101
+ 22 => [ 8048, 6256, 4544, 3536], // 105
+ 23 => [ 8752, 6880, 4912, 3712], // 109
+ 24 => [ 9392, 7312, 5312, 4112], // 113
+ 25 => [10208, 8000, 5744, 4304], // 117
+ 26 => [10960, 8496, 6032, 4768], // 121
+ 27 => [11744, 9024, 6464, 5024], // 125
+ 28 => [12248, 9544, 6968, 5288], // 129
+ 29 => [13048, 10136, 7288, 5608], // 133
+ 30 => [13880, 10984, 7880, 5960], // 137
+ 31 => [14744, 11640, 8264, 6344], // 141
+ 32 => [15640, 12328, 8920, 6760], // 145
+ 33 => [16568, 13048, 9368, 7208], // 149
+ 34 => [17528, 13800, 9848, 7688], // 153
+ 35 => [18448, 14496, 10288, 7888], // 157
+ 36 => [19472, 15312, 10832, 8432], // 161
+ 37 => [20528, 15936, 11408, 8768], // 165
+ 38 => [21616, 16816, 12016, 9136], // 169
+ 39 => [22496, 17728, 12656, 9776], // 173
+ 40 => [23648, 18672, 13328, 10208], // 177
+ ];
+
+ /**
+ * ISO/IEC 18004:2000 Section 8.9 - Format Information
+ *
+ * ECC level -> mask pattern
+ *
+ * @var int[][]
+ */
+ private const FORMAT_PATTERN = [
+ [ // L
+ 0b111011111000100,
+ 0b111001011110011,
+ 0b111110110101010,
+ 0b111100010011101,
+ 0b110011000101111,
+ 0b110001100011000,
+ 0b110110001000001,
+ 0b110100101110110,
+ ],
+ [ // M
+ 0b101010000010010,
+ 0b101000100100101,
+ 0b101111001111100,
+ 0b101101101001011,
+ 0b100010111111001,
+ 0b100000011001110,
+ 0b100111110010111,
+ 0b100101010100000,
+ ],
+ [ // Q
+ 0b011010101011111,
+ 0b011000001101000,
+ 0b011111100110001,
+ 0b011101000000110,
+ 0b010010010110100,
+ 0b010000110000011,
+ 0b010111011011010,
+ 0b010101111101101,
+ ],
+ [ // H
+ 0b001011010001001,
+ 0b001001110111110,
+ 0b001110011100111,
+ 0b001100111010000,
+ 0b000011101100010,
+ 0b000001001010101,
+ 0b000110100001100,
+ 0b000100000111011,
+ ],
+ ];
+
+ private int $eccLevel;
+
+ /**
+ * @param int $eccLevel containing the two bits encoding a QR Code's error correction level
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ public function __construct(int $eccLevel){
+
+ if((0b11 & $eccLevel) !== $eccLevel){
+ throw new QRCodeException('invalid ECC level');
+ }
+
+ $this->eccLevel = $eccLevel;
+ }
+
+ /**
+ * returns the string representation of the current ECC level
+ */
+ public function __toString():string{
+ return self::MODES_STRING[$this->eccLevel];
+ }
+
+ /**
+ * returns the current ECC level
+ */
+ public function getLevel():int{
+ return $this->eccLevel;
+ }
+
+ /**
+ * returns the ordinal value of the current ECC level
+ */
+ public function getOrdinal():int{
+ return self::MODES[$this->eccLevel];
+ }
+
+ /**
+ * returns the format pattern for the given $eccLevel and $maskPattern
+ */
+ public function getformatPattern(MaskPattern $maskPattern):int{
+ return self::FORMAT_PATTERN[self::MODES[$this->eccLevel]][$maskPattern->getPattern()];
+ }
+
+ /**
+ * returns an array wit the max bit lengths for version 1-40 and the current ECC level
+ */
+ public function getMaxBits():array{
+ return array_combine(
+ array_keys(self::MAX_BITS),
+ array_column(self::MAX_BITS, self::MODES[$this->eccLevel])
+ );
+ }
+
+}
diff --git a/src/Common/FormatInformation.php b/src/Common/FormatInformation.php
new file mode 100644
index 000000000..da46ff055
--- /dev/null
+++ b/src/Common/FormatInformation.php
@@ -0,0 +1,91 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Common;
+
+/**
+ * Encapsulates a QR Code's format information, including the data mask used and
+ * error correction level.
+ *
+ * @author Sean Owen
+ * @see \chillerlan\QRCode\Common\ErrorCorrectionLevel
+ */
+final class FormatInformation{
+
+ public const MASK_QR = 0x5412;
+
+ /**
+ * See ISO 18004:2006, Annex C, Table C.1
+ *
+ * [data bits, sequence after masking]
+ */
+ public const DECODE_LOOKUP = [
+ [0x00, 0x5412],
+ [0x01, 0x5125],
+ [0x02, 0x5E7C],
+ [0x03, 0x5B4B],
+ [0x04, 0x45F9],
+ [0x05, 0x40CE],
+ [0x06, 0x4F97],
+ [0x07, 0x4AA0],
+ [0x08, 0x77C4],
+ [0x09, 0x72F3],
+ [0x0A, 0x7DAA],
+ [0x0B, 0x789D],
+ [0x0C, 0x662F],
+ [0x0D, 0x6318],
+ [0x0E, 0x6C41],
+ [0x0F, 0x6976],
+ [0x10, 0x1689],
+ [0x11, 0x13BE],
+ [0x12, 0x1CE7],
+ [0x13, 0x19D0],
+ [0x14, 0x0762],
+ [0x15, 0x0255],
+ [0x16, 0x0D0C],
+ [0x17, 0x083B],
+ [0x18, 0x355F],
+ [0x19, 0x3068],
+ [0x1A, 0x3F31],
+ [0x1B, 0x3A06],
+ [0x1C, 0x24B4],
+ [0x1D, 0x2183],
+ [0x1E, 0x2EDA],
+ [0x1F, 0x2BED],
+ ];
+
+ private int $errorCorrectionLevel;
+ private int $dataMask;
+
+ /**
+ *
+ */
+ public function __construct(int $formatInfo){
+ $this->errorCorrectionLevel = ($formatInfo >> 3) & 0x03; // Bits 3,4
+ $this->dataMask = ($formatInfo & 0x07); // Bottom 3 bits
+ }
+
+ /**
+ *
+ */
+ public function getErrorCorrectionLevel():EccLevel{
+ return new EccLevel($this->errorCorrectionLevel);
+ }
+
+ /**
+ *
+ */
+ public function getDataMask():MaskPattern{
+ return new MaskPattern($this->dataMask);
+ }
+
+}
+
diff --git a/src/Common/GF256.php b/src/Common/GF256.php
new file mode 100644
index 000000000..5ae7a85f9
--- /dev/null
+++ b/src/Common/GF256.php
@@ -0,0 +1,151 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use InvalidArgumentException;
+
+use function array_fill;
+
+/**
+ * This class contains utility methods for performing mathematical operations over
+ * the Galois Fields. Operations use a given primitive polynomial in calculations.
+ *
+ * Throughout this package, elements of the GF are represented as an {@code int}
+ * for convenience and speed (but at the cost of memory).
+ *
+ *
+ * @author Sean Owen
+ * @author David Olivier
+ */
+final class GF256{
+
+ /**
+ * irreducible polynomial whose coefficients are represented by the bits of an int,
+ * where the least-significant bit represents the constant coefficient
+ */
+# private int $primitive = 0x011D;
+
+ private const logTable = [
+ 0, // the first value is never returned, index starts at 1
+ 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75,
+ 4, 100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113,
+ 5, 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69,
+ 29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114, 166,
+ 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145, 34, 136,
+ 54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92, 131, 56, 70, 64,
+ 30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40, 84, 250, 133, 186, 61,
+ 202, 94, 155, 159, 10, 21, 121, 43, 78, 212, 229, 172, 115, 243, 167, 87,
+ 7, 112, 192, 247, 140, 128, 99, 13, 103, 74, 222, 237, 49, 197, 254, 24,
+ 227, 165, 153, 119, 38, 184, 180, 124, 17, 68, 146, 217, 35, 32, 137, 46,
+ 55, 63, 209, 91, 149, 188, 207, 205, 144, 135, 151, 178, 220, 252, 190, 97,
+ 242, 86, 211, 171, 20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162,
+ 31, 45, 67, 216, 183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246,
+ 108, 161, 59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90,
+ 203, 89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215,
+ 79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80, 88, 175,
+ ];
+
+ private const expTable = [
+ 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38,
+ 76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192,
+ 157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35,
+ 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222, 161,
+ 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60, 120, 240,
+ 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163, 91, 182, 113, 226,
+ 217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52, 104, 208, 189, 103, 206,
+ 129, 31, 62, 124, 248, 237, 199, 147, 59, 118, 236, 197, 151, 51, 102, 204,
+ 133, 23, 46, 92, 184, 109, 218, 169, 79, 158, 33, 66, 132, 21, 42, 84,
+ 168, 77, 154, 41, 82, 164, 85, 170, 73, 146, 57, 114, 228, 213, 183, 115,
+ 230, 209, 191, 99, 198, 145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255,
+ 227, 219, 171, 75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65,
+ 130, 25, 50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166,
+ 81, 162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9,
+ 18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11, 22,
+ 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71, 142, 1,
+ ];
+
+ /**
+ * Implements both addition and subtraction -- they are the same in GF(size).
+ *
+ * @return int sum/difference of a and b
+ */
+ public static function addOrSubtract(int $a, int $b):int{
+ return $a ^ $b;
+ }
+
+ /**
+ * @return GenericGFPoly the monomial representing coefficient * x^degree
+ */
+ public static function buildMonomial(int $degree, int $coefficient):GenericGFPoly{
+
+ if($degree < 0){
+ throw new InvalidArgumentException();
+ }
+
+ $coefficients = array_fill(0, $degree + 1, 0);
+ $coefficients[0] = $coefficient;
+
+ return new GenericGFPoly($coefficients);
+ }
+
+ /**
+ * @return int 2 to the power of a in GF(size)
+ */
+ public static function exp(int $a):int{
+
+ if($a < 0){
+ $a += 255;
+ }
+ elseif($a >= 256){
+ $a -= 255;
+ }
+
+ return self::expTable[$a];
+ }
+
+ /**
+ * @return int base 2 log of a in GF(size)
+ */
+ public static function log(int $a):int{
+
+ if($a < 1){
+ throw new InvalidArgumentException();
+ }
+
+ return self::logTable[$a];
+ }
+
+ /**
+ * @return int multiplicative inverse of a
+ */
+ public static function inverse(int $a):int{
+
+ if($a === 0){
+ throw new InvalidArgumentException();
+ }
+
+ return self::expTable[256 - self::logTable[$a] - 1];
+ }
+
+ /**
+ * @return int product of a and b in GF(size)
+ */
+ public static function multiply(int $a, int $b):int{
+
+ if($a === 0 || $b === 0){
+ return 0;
+ }
+
+ return self::expTable[(self::logTable[$a] + self::logTable[$b]) % 255];
+ }
+
+}
diff --git a/src/Common/GenericGFPoly.php b/src/Common/GenericGFPoly.php
new file mode 100644
index 000000000..98962356e
--- /dev/null
+++ b/src/Common/GenericGFPoly.php
@@ -0,0 +1,263 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use InvalidArgumentException;
+
+use function array_fill, array_slice, array_splice, count;
+
+/**
+ * Represents a polynomial whose coefficients are elements of a GF.
+ * Instances of this class are immutable.
+ *
+ * Much credit is due to William Rucklidge since portions of this code are an indirect
+ * port of his C++ Reed-Solomon implementation.
+ *
+ * @author Sean Owen
+ */
+final class GenericGFPoly{
+
+ private array $coefficients;
+
+ /**
+ * @param array $coefficients array coefficients as ints representing elements of GF(size), arranged
+ * from most significant (highest-power term) coefficient to least significant
+ * @param int|null $degree
+ *
+ * @throws \InvalidArgumentException if argument is null or empty, or if leading coefficient is 0 and this is not a
+ * constant polynomial (that is, it is not the monomial "0")
+ */
+ public function __construct(array $coefficients, int $degree = null){
+ $degree ??= 0;
+
+ if(empty($coefficients)){
+ throw new InvalidArgumentException('arg $coefficients is empty');
+ }
+
+ if($degree < 0){
+ throw new InvalidArgumentException('negative degree');
+ }
+
+ $coefficientsLength = count($coefficients);
+
+ // Leading term must be non-zero for anything except the constant polynomial "0"
+ $firstNonZero = 0;
+
+ while($firstNonZero < $coefficientsLength && $coefficients[$firstNonZero] === 0){
+ $firstNonZero++;
+ }
+
+ if($firstNonZero === $coefficientsLength){
+ $this->coefficients = [0];
+ }
+ else{
+ $this->coefficients = array_fill(0, $coefficientsLength - $firstNonZero + $degree, 0);
+
+ for($i = 0; $i < $coefficientsLength - $firstNonZero; $i++){
+ $this->coefficients[$i] = $coefficients[$i + $firstNonZero];
+ }
+ }
+ }
+
+ /**
+ * @return int $coefficient of x^degree term in this polynomial
+ */
+ public function getCoefficient(int $degree):int{
+ return $this->coefficients[count($this->coefficients) - 1 - $degree];
+ }
+
+ /**
+ * @return int[]
+ */
+ public function getCoefficients():array{
+ return $this->coefficients;
+ }
+
+ /**
+ * @return int $degree of this polynomial
+ */
+ public function getDegree():int{
+ return count($this->coefficients) - 1;
+ }
+
+ /**
+ * @return bool true if this polynomial is the monomial "0"
+ */
+ public function isZero():bool{
+ return $this->coefficients[0] === 0;
+ }
+
+ /**
+ * @return int evaluation of this polynomial at a given point
+ */
+ public function evaluateAt(int $a):int{
+
+ if($a === 0){
+ // Just return the x^0 coefficient
+ return $this->getCoefficient(0);
+ }
+
+ $result = 0;
+
+ foreach($this->coefficients as $c){
+ // if $a === 1 just the sum of the coefficients
+ $result = GF256::addOrSubtract(($a === 1 ? $result : GF256::multiply($a, $result)), $c);
+ }
+
+ return $result;
+ }
+
+ /**
+ *
+ */
+ public function multiply(GenericGFPoly $other):self{
+
+ if($this->isZero() || $other->isZero()){
+ return new self([0]);
+ }
+
+ $product = array_fill(0, count($this->coefficients) + count($other->coefficients) - 1, 0);
+
+ foreach($this->coefficients as $i => $aCoeff){
+ foreach($other->coefficients as $j => $bCoeff){
+ $product[$i + $j] ^= GF256::multiply($aCoeff, $bCoeff);
+ }
+ }
+
+ return new self($product);
+ }
+
+ /**
+ * @return \chillerlan\QRCode\Common\GenericGFPoly[] [quotient, remainder]
+ */
+ public function divide(GenericGFPoly $other):array{
+
+ if($other->isZero()){
+ throw new InvalidArgumentException('Division by 0');
+ }
+
+ $quotient = new self([0]);
+ $remainder = clone $this;
+
+ $denominatorLeadingTerm = $other->getCoefficient($other->getDegree());
+ $inverseDenominatorLeadingTerm = GF256::inverse($denominatorLeadingTerm);
+
+ while($remainder->getDegree() >= $other->getDegree() && !$remainder->isZero()){
+ $scale = GF256::multiply($remainder->getCoefficient($remainder->getDegree()), $inverseDenominatorLeadingTerm);
+ $diff = $remainder->getDegree() - $other->getDegree();
+ $quotient = $quotient->addOrSubtract(GF256::buildMonomial($diff, $scale));
+ $remainder = $remainder->addOrSubtract($other->multiplyByMonomial($diff, $scale));
+ }
+
+ return [$quotient, $remainder];
+
+ }
+
+ /**
+ *
+ */
+ public function multiplyInt(int $scalar):self{
+
+ if($scalar === 0){
+ return new self([0]);
+ }
+
+ if($scalar === 1){
+ return $this;
+ }
+
+ $product = array_fill(0, count($this->coefficients), 0);
+
+ foreach($this->coefficients as $i => $c){
+ $product[$i] = GF256::multiply($c, $scalar);
+ }
+
+ return new self($product);
+ }
+
+ /**
+ *
+ */
+ public function multiplyByMonomial(int $degree, int $coefficient):self{
+
+ if($degree < 0){
+ throw new InvalidArgumentException();
+ }
+
+ if($coefficient === 0){
+ return new self([0]);
+ }
+
+ $product = array_fill(0, count($this->coefficients) + $degree, 0);
+
+ foreach($this->coefficients as $i => $c){
+ $product[$i] = GF256::multiply($c, $coefficient);
+ }
+
+ return new self($product);
+ }
+
+ /**
+ *
+ */
+ public function mod(GenericGFPoly $other):self{
+
+ if(count($this->coefficients) - count($other->coefficients) < 0){
+ return $this;
+ }
+
+ $ratio = GF256::log($this->coefficients[0]) - GF256::log($other->coefficients[0]);
+
+ foreach($other->coefficients as $i => $c){
+ $this->coefficients[$i] ^= GF256::exp(GF256::log($c) + $ratio);
+ }
+
+ return (new self($this->coefficients))->mod($other);
+ }
+
+ /**
+ *
+ */
+ public function addOrSubtract(GenericGFPoly $other):self{
+
+ if($this->isZero()){
+ return $other;
+ }
+
+ if($other->isZero()){
+ return $this;
+ }
+
+ $smallerCoefficients = $this->coefficients;
+ $largerCoefficients = $other->coefficients;
+
+ if(count($smallerCoefficients) > count($largerCoefficients)){
+ $temp = $smallerCoefficients;
+ $smallerCoefficients = $largerCoefficients;
+ $largerCoefficients = $temp;
+ }
+
+ $sumDiff = array_fill(0, count($largerCoefficients), 0);
+ $lengthDiff = count($largerCoefficients) - count($smallerCoefficients);
+ // Copy high-order terms only found in higher-degree polynomial's coefficients
+ array_splice($sumDiff, 0, $lengthDiff, array_slice($largerCoefficients, 0, $lengthDiff));
+
+ $countLargerCoefficients = count($largerCoefficients);
+
+ for($i = $lengthDiff; $i < $countLargerCoefficients; $i++){
+ $sumDiff[$i] = GF256::addOrSubtract($smallerCoefficients[$i - $lengthDiff], $largerCoefficients[$i]);
+ }
+
+ return new self($sumDiff);
+ }
+
+}
diff --git a/src/Common/MaskPattern.php b/src/Common/MaskPattern.php
new file mode 100644
index 000000000..7e3f77d62
--- /dev/null
+++ b/src/Common/MaskPattern.php
@@ -0,0 +1,86 @@
+
+ * @copyright 2021 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use chillerlan\QRCode\QRCodeException;
+use Closure;
+
+/**
+ * ISO/IEC 18004:2000 Section 8.8.1
+ */
+final class MaskPattern{
+
+ public const PATTERN_000 = 0b000;
+ public const PATTERN_001 = 0b001;
+ public const PATTERN_010 = 0b010;
+ public const PATTERN_011 = 0b011;
+ public const PATTERN_100 = 0b100;
+ public const PATTERN_101 = 0b101;
+ public const PATTERN_110 = 0b110;
+ public const PATTERN_111 = 0b111;
+
+ public const PATTERNS = [
+ self::PATTERN_000,
+ self::PATTERN_001,
+ self::PATTERN_010,
+ self::PATTERN_011,
+ self::PATTERN_100,
+ self::PATTERN_101,
+ self::PATTERN_110,
+ self::PATTERN_111,
+ ];
+
+ private int $maskPattern;
+
+ /**
+ * MaskPattern constructor.
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ public function __construct(int $maskPattern){
+
+ if((0b111 & $maskPattern) !== $maskPattern){
+ throw new QRCodeException('invalid mask pattern');
+ }
+
+ $this->maskPattern = $maskPattern;
+ }
+
+ /**
+ * Returns the current mask pattern
+ */
+ public function getPattern():int{
+ return $this->maskPattern;
+ }
+
+ /**
+ * Returns a closure that applies the mask for the chosen mask pattern.
+ *
+ * Note that some versions of the QR code standard have had errors in the section about mask patterns.
+ * The information below has been corrected.
+ *
+ * @see https://www.thonky.com/qr-code-tutorial/mask-patterns
+ */
+ public function getMask():Closure{
+ // $x = column (width), $y = row (height)
+ return [
+ self::PATTERN_000 => fn(int $x, int $y):int => ($x + $y) % 2,
+ self::PATTERN_001 => fn(int $x, int $y):int => $y % 2,
+ self::PATTERN_010 => fn(int $x, int $y):int => $x % 3,
+ self::PATTERN_011 => fn(int $x, int $y):int => ($x + $y) % 3,
+ self::PATTERN_100 => fn(int $x, int $y):int => ((int)($y / 2) + (int)($x / 3)) % 2,
+ self::PATTERN_101 => fn(int $x, int $y):int => (($x * $y) % 2) + (($x * $y) % 3),
+ self::PATTERN_110 => fn(int $x, int $y):int => ((($x * $y) % 2) + (($x * $y) % 3)) % 2,
+ self::PATTERN_111 => fn(int $x, int $y):int => ((($x * $y) % 3) + (($x + $y) % 2)) % 2,
+ ][$this->maskPattern];
+ }
+
+}
diff --git a/src/Common/MaskPatternTester.php b/src/Common/MaskPatternTester.php
new file mode 100644
index 000000000..abda352a7
--- /dev/null
+++ b/src/Common/MaskPatternTester.php
@@ -0,0 +1,202 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ *
+ * @noinspection PhpUnused
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use chillerlan\QRCode\Data\QRData;
+use function abs, array_search, call_user_func_array, min;
+
+/**
+ * Receives a QRData object and runs the mask pattern tests on it.
+ *
+ * ISO/IEC 18004:2000 Section 8.8.2 - Evaluation of masking results
+ *
+ * @see http://www.thonky.com/qr-code-tutorial/data-masking
+ */
+final class MaskPatternTester{
+
+ /**
+ * The data interface that contains the data matrix to test
+ */
+ private QRData $qrData;
+
+ /**
+ * Receives the QRData object
+ *
+ * @see \chillerlan\QRCode\QROptions::$maskPattern
+ * @see \chillerlan\QRCode\Data\QRMatrix::$maskPattern
+ */
+ public function __construct(QRData $qrData){
+ $this->qrData = $qrData;
+ }
+
+ /**
+ * shoves a QRMatrix through the MaskPatternTester to find the lowest penalty mask pattern
+ *
+ * @see \chillerlan\QRCode\Data\MaskPatternTester
+ */
+ public function getBestMaskPattern():MaskPattern{
+ $penalties = [];
+
+ foreach(MaskPattern::PATTERNS as $pattern){
+ $penalties[$pattern] = $this->testPattern(new MaskPattern($pattern));
+ }
+
+ return new MaskPattern(array_search(min($penalties), $penalties, true));
+ }
+
+ /**
+ * Returns the penalty for the given mask pattern
+ *
+ * @see \chillerlan\QRCode\QROptions::$maskPattern
+ * @see \chillerlan\QRCode\Data\QRMatrix::$maskPattern
+ */
+ public function testPattern(MaskPattern $pattern):int{
+ $matrix = $this->qrData->writeMatrix($pattern, true);
+ $penalty = 0;
+
+ for($level = 1; $level <= 4; $level++){
+ $penalty += call_user_func_array([$this, 'testLevel'.$level], [$matrix->matrix(true), $matrix->size()]);
+ }
+
+ return (int)$penalty;
+ }
+
+ /**
+ * Checks for each group of five or more same-colored modules in a row (or column)
+ */
+ private function testLevel1(array $m, int $size):int{
+ $penalty = 0;
+
+ foreach($m as $y => $row){
+ foreach($row as $x => $val){
+ $count = 0;
+
+ for($ry = -1; $ry <= 1; $ry++){
+
+ if($y + $ry < 0 || $size <= $y + $ry){
+ continue;
+ }
+
+ for($rx = -1; $rx <= 1; $rx++){
+
+ if(($ry === 0 && $rx === 0) || (($x + $rx) < 0 || $size <= ($x + $rx))){
+ continue;
+ }
+
+ if($m[$y + $ry][$x + $rx] === $val){
+ $count++;
+ }
+
+ }
+ }
+
+ if($count > 5){
+ $penalty += (3 + $count - 5);
+ }
+
+ }
+ }
+
+ return $penalty;
+ }
+
+ /**
+ * Checks for each 2x2 area of same-colored modules in the matrix
+ */
+ private function testLevel2(array $m, int $size):int{
+ $penalty = 0;
+
+ foreach($m as $y => $row){
+
+ if($y > $size - 2){
+ break;
+ }
+
+ foreach($row as $x => $val){
+
+ if($x > $size - 2){
+ break;
+ }
+
+ if(
+ $val === $m[$y][$x + 1]
+ && $val === $m[$y + 1][$x]
+ && $val === $m[$y + 1][$x + 1]
+ ){
+ $penalty++;
+ }
+ }
+ }
+
+ return 3 * $penalty;
+ }
+
+ /**
+ * Checks if there are patterns that look similar to the finder patterns (1:1:3:1:1 ratio)
+ */
+ private function testLevel3(array $m, int $size):int{
+ $penalties = 0;
+
+ foreach($m as $y => $row){
+ foreach($row as $x => $val){
+
+ if(
+ $x + 6 < $size
+ && $val
+ && !$m[$y][$x + 1]
+ && $m[$y][$x + 2]
+ && $m[$y][$x + 3]
+ && $m[$y][$x + 4]
+ && !$m[$y][$x + 5]
+ && $m[$y][$x + 6]
+ ){
+ $penalties++;
+ }
+
+ if(
+ $y + 6 < $size
+ && $val
+ && !$m[$y + 1][$x]
+ && $m[$y + 2][$x]
+ && $m[$y + 3][$x]
+ && $m[$y + 4][$x]
+ && !$m[$y + 5][$x]
+ && $m[$y + 6][$x]
+ ){
+ $penalties++;
+ }
+
+ }
+ }
+
+ return $penalties * 40;
+ }
+
+ /**
+ * Checks if more than half of the modules are dark or light, with a larger penalty for a larger difference
+ */
+ private function testLevel4(array $m, int $size):float{
+ $count = 0;
+
+ foreach($m as $y => $row){
+ foreach($row as $x => $val){
+ if($val){
+ $count++;
+ }
+ }
+ }
+
+ return (abs(100 * $count / $size / $size - 50) / 5) * 10;
+ }
+
+}
diff --git a/src/Common/Mode.php b/src/Common/Mode.php
new file mode 100644
index 000000000..4ac298766
--- /dev/null
+++ b/src/Common/Mode.php
@@ -0,0 +1,112 @@
+
+ * @copyright 2020 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use chillerlan\QRCode\Data\{AlphaNum, Byte, Kanji, Number};
+use chillerlan\QRCode\QRCodeException;
+
+/**
+ * ISO 18004:2006, 6.4.1, Tables 2 and 3
+ */
+final class Mode{
+
+ // ISO/IEC 18004:2000 Table 2
+
+ /** @var int */
+ public const DATA_TERMINATOR = 0b0000;
+ /** @var int */
+ public const DATA_NUMBER = 0b0001;
+ /** @var int */
+ public const DATA_ALPHANUM = 0b0010;
+ /** @var int */
+ public const DATA_BYTE = 0b0100;
+ /** @var int */
+ public const DATA_KANJI = 0b1000;
+ /** @var int */
+ public const DATA_STRCTURED_APPEND = 0b0011;
+ /** @var int */
+ public const DATA_FNC1_FIRST = 0b0101;
+ /** @var int */
+ public const DATA_FNC1_SECOND = 0b1001;
+ /** @var int */
+ public const DATA_ECI = 0b0111;
+
+ /**
+ * mode length bits for the version breakpoints 1-9, 10-26 and 27-40
+ *
+ * ISO/IEC 18004:2000 Table 3 - Number of bits in Character Count Indicator
+ */
+ public const LENGTH_BITS = [
+ self::DATA_NUMBER => [10, 12, 14],
+ self::DATA_ALPHANUM => [ 9, 11, 13],
+ self::DATA_BYTE => [ 8, 16, 16],
+ self::DATA_KANJI => [ 8, 10, 12],
+ ];
+
+ /**
+ * Map of data mode => interface (detection order)
+ *
+ * @var string[]
+ */
+ public const DATA_INTERFACES = [
+ self::DATA_NUMBER => Number::class,
+ self::DATA_ALPHANUM => AlphaNum::class,
+ self::DATA_KANJI => Kanji::class,
+ self::DATA_BYTE => Byte::class,
+ ];
+
+ /**
+ * References to the keys of the following table(s):
+ *
+ * @see \chillerlan\QRCode\Common\Version::MAX_LENGTH
+ *
+ * @var int[]
+ */
+ public const DATA_MODES = [
+ self::DATA_NUMBER => 0,
+ self::DATA_ALPHANUM => 1,
+ self::DATA_BYTE => 2,
+ self::DATA_KANJI => 3,
+ ];
+
+ /**
+ * returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ public static function getLengthBitsForVersion(int $mode, int $version):int{
+
+ if(!isset(self::LENGTH_BITS[$mode])){
+ throw new QRCodeException('invalid mode given');
+ }
+
+ $minVersion = 0;
+
+ foreach([9, 26, 40] as $key => $breakpoint){
+
+ if($version > $minVersion && $version <= $breakpoint){
+ return self::LENGTH_BITS[$mode][$key];
+ }
+
+ $minVersion = $breakpoint;
+ }
+
+ throw new QRCodeException(sprintf('invalid version number: %d', $version));
+ }
+
+ /**
+ * returns the array of length bits for the given mode
+ */
+ public static function getLengthBitsForMode(int $mode):array{
+ return self::LENGTH_BITS[$mode];
+ }
+
+}
diff --git a/src/Common/ReedSolomonDecoder.php b/src/Common/ReedSolomonDecoder.php
new file mode 100644
index 000000000..213f06179
--- /dev/null
+++ b/src/Common/ReedSolomonDecoder.php
@@ -0,0 +1,195 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use RuntimeException;
+use function array_fill, count;
+
+/**
+ * Implements Reed-Solomon decoding, as the name implies.
+ *
+ * The algorithm will not be explained here, but the following references were helpful
+ * in creating this implementation:
+ *
+ *
+ *
+ * Much credit is due to William Rucklidge since portions of this code are an indirect
+ * port of his C++ Reed-Solomon implementation.
+ *
+ * @author Sean Owen
+ * @author William Rucklidge
+ * @author sanfordsquires
+ */
+final class ReedSolomonDecoder{
+
+ /**
+ * Decodes given set of received codewords, which include both data and error-correction
+ * codewords. Really, this means it uses Reed-Solomon to detect and correct errors, in-place,
+ * in the input.
+ *
+ * @param array $received data and error-correction codewords
+ * @param int $numEccCodewords number of error-correction codewords available
+ *
+ * @return int[]
+ * @throws \RuntimeException if decoding fails for any reason
+ */
+ public function decode(array $received, int $numEccCodewords):array{
+ $poly = new GenericGFPoly($received);
+ $syndromeCoefficients = [];
+ $noError = true;
+
+ for($i = 0, $j = $numEccCodewords - 1; $i < $numEccCodewords; $i++, $j--){
+ $eval = $poly->evaluateAt(GF256::exp($i));
+ $syndromeCoefficients[$j] = $eval;
+
+ if($eval !== 0){
+ $noError = false;
+ }
+ }
+
+ if($noError){
+ return $received;
+ }
+
+ [$sigma, $omega] = $this->runEuclideanAlgorithm(
+ GF256::buildMonomial($numEccCodewords, 1),
+ new GenericGFPoly($syndromeCoefficients),
+ $numEccCodewords
+ );
+
+ $errorLocations = $this->findErrorLocations($sigma);
+ $errorMagnitudes = $this->findErrorMagnitudes($omega, $errorLocations);
+ $errorLocationsCount = count($errorLocations);
+ $receivedCount = count($received);
+
+ for($i = 0; $i < $errorLocationsCount; $i++){
+ $position = $receivedCount - 1 - GF256::log($errorLocations[$i]);
+
+ if($position < 0){
+ throw new RuntimeException('Bad error location');
+ }
+
+ $received[$position] ^= $errorMagnitudes[$i];
+ }
+
+ return $received;
+ }
+
+ /**
+ * @return \chillerlan\QRCode\Common\GenericGFPoly[] [sigma, omega]
+ * @throws \RuntimeException
+ */
+ private function runEuclideanAlgorithm(GenericGFPoly $a, GenericGFPoly $b, int $R):array{
+ // Assume a's degree is >= b's
+ if($a->getDegree() < $b->getDegree()){
+ $temp = $a;
+ $a = $b;
+ $b = $temp;
+ }
+
+ $rLast = $a;
+ $r = $b;
+ $tLast = new GenericGFPoly([0]);
+ $t = new GenericGFPoly([1]);
+
+ // Run Euclidean algorithm until r's degree is less than R/2
+ while($r->getDegree() >= $R / 2){
+ $rLastLast = $rLast;
+ $tLastLast = $tLast;
+ $rLast = $r;
+ $tLast = $t;
+
+ // Divide rLastLast by rLast, with quotient in q and remainder in r
+ [$q, $r] = $rLastLast->divide($rLast);
+
+ $t = $q->multiply($tLast)->addOrSubtract($tLastLast);
+
+ if($r->getDegree() >= $rLast->getDegree()){
+ throw new RuntimeException('Division algorithm failed to reduce polynomial?');
+ }
+ }
+
+ $sigmaTildeAtZero = $t->getCoefficient(0);
+
+ if($sigmaTildeAtZero === 0){
+ throw new RuntimeException('sigmaTilde(0) was zero');
+ }
+
+ $inverse = GF256::inverse($sigmaTildeAtZero);
+
+ return [$t->multiplyInt($inverse), $r->multiplyInt($inverse)];
+ }
+
+ /**
+ * @throws \RuntimeException
+ */
+ private function findErrorLocations(GenericGFPoly $errorLocator):array{
+ // This is a direct application of Chien's search
+ $numErrors = $errorLocator->getDegree();
+
+ if($numErrors === 1){ // shortcut
+ return [$errorLocator->getCoefficient(1)];
+ }
+
+ $result = array_fill(0, $numErrors, 0);
+ $e = 0;
+
+ for($i = 1; $i < 256 && $e < $numErrors; $i++){
+ if($errorLocator->evaluateAt($i) === 0){
+ $result[$e] = GF256::inverse($i);
+ $e++;
+ }
+ }
+
+ if($e !== $numErrors){
+ throw new RuntimeException('Error locator degree does not match number of roots');
+ }
+
+ return $result;
+ }
+
+ /**
+ *
+ */
+ private function findErrorMagnitudes(GenericGFPoly $errorEvaluator, array $errorLocations):array{
+ // This is directly applying Forney's Formula
+ $s = count($errorLocations);
+ $result = [];
+
+ for($i = 0; $i < $s; $i++){
+ $xiInverse = GF256::inverse($errorLocations[$i]);
+ $denominator = 1;
+
+ for($j = 0; $j < $s; $j++){
+ if($i !== $j){
+# $denominator = GF256::multiply($denominator, GF256::addOrSubtract(1, GF256::multiply($errorLocations[$j], $xiInverse)));
+ // Above should work but fails on some Apple and Linux JDKs due to a Hotspot bug.
+ // Below is a funny-looking workaround from Steven Parkes
+ $term = GF256::multiply($errorLocations[$j], $xiInverse);
+ $denominator = GF256::multiply($denominator, (($term & 0x1) === 0 ? $term | 1 : $term & ~1));
+ }
+ }
+
+ $result[$i] = GF256::multiply($errorEvaluator->evaluateAt($xiInverse), GF256::inverse($denominator));
+ }
+
+ return $result;
+ }
+
+}
diff --git a/src/Common/ReedSolomonEncoder.php b/src/Common/ReedSolomonEncoder.php
new file mode 100644
index 000000000..4a65bba13
--- /dev/null
+++ b/src/Common/ReedSolomonEncoder.php
@@ -0,0 +1,115 @@
+
+ * @copyright 2021 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use SplFixedArray;
+
+use function array_fill, array_merge, count, max;
+
+/**
+ * ISO/IEC 18004:2000 Section 8.5 ff
+ *
+ * @see http://www.thonky.com/qr-code-tutorial/error-correction-coding
+ */
+final class ReedSolomonEncoder{
+
+ private SplFixedArray $interleavedData;
+ private int $interleavedDataIndex;
+
+ /**
+ * ECC interleaving
+ *
+ * @return \SplFixedArray
+ */
+ public function interleaveEcBytes(BitBuffer $bitBuffer, Version $version, EccLevel $eccLevel):SplFixedArray{
+ [$numEccCodewords, [[$l1, $b1], [$l2, $b2]]] = $version->getRSBlocks($eccLevel);
+
+ $rsBlocks = array_fill(0, $l1, [$numEccCodewords + $b1, $b1]);
+
+ if($l2 > 0){
+ $rsBlocks = array_merge($rsBlocks, array_fill(0, $l2, [$numEccCodewords + $b2, $b2]));
+ }
+
+ $bitBufferData = $bitBuffer->getBuffer();
+ $dataBytes = [];
+ $ecBytes = [];
+ $maxDataBytes = 0;
+ $maxEcBytes = 0;
+ $dataByteOffset = 0;
+
+ foreach($rsBlocks as $key => $block){
+ [$rsBlockTotal, $dataByteCount] = $block;
+
+ $dataBytes[$key] = [];
+
+ for($i = 0; $i < $dataByteCount; $i++){
+ $dataBytes[$key][$i] = $bitBufferData[$i + $dataByteOffset] & 0xff;
+ }
+
+ $ecByteCount = $rsBlockTotal - $dataByteCount;
+ $ecBytes[$key] = $this->generateEcBytes($dataBytes[$key], $ecByteCount);
+ $maxDataBytes = max($maxDataBytes, $dataByteCount);
+ $maxEcBytes = max($maxEcBytes, $ecByteCount);
+ $dataByteOffset += $dataByteCount;
+ }
+
+ $this->interleavedData = new SplFixedArray($version->getTotalCodewords());
+ $this->interleavedDataIndex = 0;
+ $numRsBlocks = $l1 + $l2;
+
+ $this->interleave($dataBytes, $maxDataBytes, $numRsBlocks);
+ $this->interleave($ecBytes, $maxEcBytes, $numRsBlocks);
+
+ return $this->interleavedData;
+ }
+
+ /**
+ *
+ */
+ private function generateEcBytes(array $dataBytes, int $ecByteCount):array{
+ $rsPoly = new GenericGFPoly([1]);
+
+ for($i = 0; $i < $ecByteCount; $i++){
+ $rsPoly = $rsPoly->multiply(new GenericGFPoly([1, GF256::exp($i)]));
+ }
+
+ $rsPolyDegree = $rsPoly->getDegree();
+
+ $modCoefficients = (new GenericGFPoly($dataBytes, $rsPolyDegree))
+ ->mod($rsPoly)
+ ->getCoefficients()
+ ;
+
+ $ecBytes = array_fill(0, $rsPolyDegree, 0);
+ $count = count($modCoefficients) - $rsPolyDegree;
+
+ foreach($ecBytes as $i => &$val){
+ $modIndex = $i + $count;
+ $val = $modIndex >= 0 ? $modCoefficients[$modIndex] : 0;
+ }
+
+ return $ecBytes;
+ }
+
+ /**
+ *
+ */
+ private function interleave(array $byteArray, int $maxBytes, int $numRsBlocks):void{
+ for($x = 0; $x < $maxBytes; $x++){
+ for($y = 0; $y < $numRsBlocks; $y++){
+ if($x < count($byteArray[$y])){
+ $this->interleavedData[$this->interleavedDataIndex++] = $byteArray[$y][$x];
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/Common/Version.php b/src/Common/Version.php
new file mode 100644
index 000000000..84d112e62
--- /dev/null
+++ b/src/Common/Version.php
@@ -0,0 +1,333 @@
+
+ * @copyright 2020 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Common;
+
+use chillerlan\QRCode\QRCodeException;
+
+/**
+ *
+ */
+final class Version{
+
+ /**
+ * ISO/IEC 18004:2000 Annex E, Table E.1 - Row/column coordinates of center module of Alignment Patterns
+ *
+ * version -> pattern
+ *
+ * @var int[][]
+ */
+ private const ALIGNMENT_PATTERN = [
+ 1 => [],
+ 2 => [6, 18],
+ 3 => [6, 22],
+ 4 => [6, 26],
+ 5 => [6, 30],
+ 6 => [6, 34],
+ 7 => [6, 22, 38],
+ 8 => [6, 24, 42],
+ 9 => [6, 26, 46],
+ 10 => [6, 28, 50],
+ 11 => [6, 30, 54],
+ 12 => [6, 32, 58],
+ 13 => [6, 34, 62],
+ 14 => [6, 26, 46, 66],
+ 15 => [6, 26, 48, 70],
+ 16 => [6, 26, 50, 74],
+ 17 => [6, 30, 54, 78],
+ 18 => [6, 30, 56, 82],
+ 19 => [6, 30, 58, 86],
+ 20 => [6, 34, 62, 90],
+ 21 => [6, 28, 50, 72, 94],
+ 22 => [6, 26, 50, 74, 98],
+ 23 => [6, 30, 54, 78, 102],
+ 24 => [6, 28, 54, 80, 106],
+ 25 => [6, 32, 58, 84, 110],
+ 26 => [6, 30, 58, 86, 114],
+ 27 => [6, 34, 62, 90, 118],
+ 28 => [6, 26, 50, 74, 98, 122],
+ 29 => [6, 30, 54, 78, 102, 126],
+ 30 => [6, 26, 52, 78, 104, 130],
+ 31 => [6, 30, 56, 82, 108, 134],
+ 32 => [6, 34, 60, 86, 112, 138],
+ 33 => [6, 30, 58, 86, 114, 142],
+ 34 => [6, 34, 62, 90, 118, 146],
+ 35 => [6, 30, 54, 78, 102, 126, 150],
+ 36 => [6, 24, 50, 76, 102, 128, 154],
+ 37 => [6, 28, 54, 80, 106, 132, 158],
+ 38 => [6, 32, 58, 84, 110, 136, 162],
+ 39 => [6, 26, 54, 82, 110, 138, 166],
+ 40 => [6, 30, 58, 86, 114, 142, 170],
+ ];
+
+ /**
+ * ISO/IEC 18004:2000 Annex D, Table D.1 - Version information bit stream for each version
+ *
+ * no version pattern for QR Codes < 7
+ *
+ * @var int[]
+ */
+ private const VERSION_PATTERN = [
+ 7 => 0b000111110010010100,
+ 8 => 0b001000010110111100,
+ 9 => 0b001001101010011001,
+ 10 => 0b001010010011010011,
+ 11 => 0b001011101111110110,
+ 12 => 0b001100011101100010,
+ 13 => 0b001101100001000111,
+ 14 => 0b001110011000001101,
+ 15 => 0b001111100100101000,
+ 16 => 0b010000101101111000,
+ 17 => 0b010001010001011101,
+ 18 => 0b010010101000010111,
+ 19 => 0b010011010100110010,
+ 20 => 0b010100100110100110,
+ 21 => 0b010101011010000011,
+ 22 => 0b010110100011001001,
+ 23 => 0b010111011111101100,
+ 24 => 0b011000111011000100,
+ 25 => 0b011001000111100001,
+ 26 => 0b011010111110101011,
+ 27 => 0b011011000010001110,
+ 28 => 0b011100110000011010,
+ 29 => 0b011101001100111111,
+ 30 => 0b011110110101110101,
+ 31 => 0b011111001001010000,
+ 32 => 0b100000100111010101,
+ 33 => 0b100001011011110000,
+ 34 => 0b100010100010111010,
+ 35 => 0b100011011110011111,
+ 36 => 0b100100101100001011,
+ 37 => 0b100101010000101110,
+ 38 => 0b100110101001100100,
+ 39 => 0b100111010101000001,
+ 40 => 0b101000110001101001,
+ ];
+
+ /**
+ * ISO/IEC 18004:2000 Tables 7-11 - Number of symbol characters and input data capacity for versions 1 to 40
+ *
+ * @see http://www.qrcode.com/en/about/version.html
+ *
+ * @var int [][][]
+ */
+ private const MAX_LENGTH =[
+ // v => [NUMERIC => [L, M, Q, H ], ALPHANUM => [L, M, Q, H], BINARY => [L, M, Q, H ], KANJI => [L, M, Q, H ]]
+ 1 => [[ 41, 34, 27, 17], [ 25, 20, 16, 10], [ 17, 14, 11, 7], [ 10, 8, 7, 4]],
+ 2 => [[ 77, 63, 48, 34], [ 47, 38, 29, 20], [ 32, 26, 20, 14], [ 20, 16, 12, 8]],
+ 3 => [[ 127, 101, 77, 58], [ 77, 61, 47, 35], [ 53, 42, 32, 24], [ 32, 26, 20, 15]],
+ 4 => [[ 187, 149, 111, 82], [ 114, 90, 67, 50], [ 78, 62, 46, 34], [ 48, 38, 28, 21]],
+ 5 => [[ 255, 202, 144, 106], [ 154, 122, 87, 64], [ 106, 84, 60, 44], [ 65, 52, 37, 27]],
+ 6 => [[ 322, 255, 178, 139], [ 195, 154, 108, 84], [ 134, 106, 74, 58], [ 82, 65, 45, 36]],
+ 7 => [[ 370, 293, 207, 154], [ 224, 178, 125, 93], [ 154, 122, 86, 64], [ 95, 75, 53, 39]],
+ 8 => [[ 461, 365, 259, 202], [ 279, 221, 157, 122], [ 192, 152, 108, 84], [ 118, 93, 66, 52]],
+ 9 => [[ 552, 432, 312, 235], [ 335, 262, 189, 143], [ 230, 180, 130, 98], [ 141, 111, 80, 60]],
+ 10 => [[ 652, 513, 364, 288], [ 395, 311, 221, 174], [ 271, 213, 151, 119], [ 167, 131, 93, 74]],
+ 11 => [[ 772, 604, 427, 331], [ 468, 366, 259, 200], [ 321, 251, 177, 137], [ 198, 155, 109, 85]],
+ 12 => [[ 883, 691, 489, 374], [ 535, 419, 296, 227], [ 367, 287, 203, 155], [ 226, 177, 125, 96]],
+ 13 => [[1022, 796, 580, 427], [ 619, 483, 352, 259], [ 425, 331, 241, 177], [ 262, 204, 149, 109]],
+ 14 => [[1101, 871, 621, 468], [ 667, 528, 376, 283], [ 458, 362, 258, 194], [ 282, 223, 159, 120]],
+ 15 => [[1250, 991, 703, 530], [ 758, 600, 426, 321], [ 520, 412, 292, 220], [ 320, 254, 180, 136]],
+ 16 => [[1408, 1082, 775, 602], [ 854, 656, 470, 365], [ 586, 450, 322, 250], [ 361, 277, 198, 154]],
+ 17 => [[1548, 1212, 876, 674], [ 938, 734, 531, 408], [ 644, 504, 364, 280], [ 397, 310, 224, 173]],
+ 18 => [[1725, 1346, 948, 746], [1046, 816, 574, 452], [ 718, 560, 394, 310], [ 442, 345, 243, 191]],
+ 19 => [[1903, 1500, 1063, 813], [1153, 909, 644, 493], [ 792, 624, 442, 338], [ 488, 384, 272, 208]],
+ 20 => [[2061, 1600, 1159, 919], [1249, 970, 702, 557], [ 858, 666, 482, 382], [ 528, 410, 297, 235]],
+ 21 => [[2232, 1708, 1224, 969], [1352, 1035, 742, 587], [ 929, 711, 509, 403], [ 572, 438, 314, 248]],
+ 22 => [[2409, 1872, 1358, 1056], [1460, 1134, 823, 640], [1003, 779, 565, 439], [ 618, 480, 348, 270]],
+ 23 => [[2620, 2059, 1468, 1108], [1588, 1248, 890, 672], [1091, 857, 611, 461], [ 672, 528, 376, 284]],
+ 24 => [[2812, 2188, 1588, 1228], [1704, 1326, 963, 744], [1171, 911, 661, 511], [ 721, 561, 407, 315]],
+ 25 => [[3057, 2395, 1718, 1286], [1853, 1451, 1041, 779], [1273, 997, 715, 535], [ 784, 614, 440, 330]],
+ 26 => [[3283, 2544, 1804, 1425], [1990, 1542, 1094, 864], [1367, 1059, 751, 593], [ 842, 652, 462, 365]],
+ 27 => [[3517, 2701, 1933, 1501], [2132, 1637, 1172, 910], [1465, 1125, 805, 625], [ 902, 692, 496, 385]],
+ 28 => [[3669, 2857, 2085, 1581], [2223, 1732, 1263, 958], [1528, 1190, 868, 658], [ 940, 732, 534, 405]],
+ 29 => [[3909, 3035, 2181, 1677], [2369, 1839, 1322, 1016], [1628, 1264, 908, 698], [1002, 778, 559, 430]],
+ 30 => [[4158, 3289, 2358, 1782], [2520, 1994, 1429, 1080], [1732, 1370, 982, 742], [1066, 843, 604, 457]],
+ 31 => [[4417, 3486, 2473, 1897], [2677, 2113, 1499, 1150], [1840, 1452, 1030, 790], [1132, 894, 634, 486]],
+ 32 => [[4686, 3693, 2670, 2022], [2840, 2238, 1618, 1226], [1952, 1538, 1112, 842], [1201, 947, 684, 518]],
+ 33 => [[4965, 3909, 2805, 2157], [3009, 2369, 1700, 1307], [2068, 1628, 1168, 898], [1273, 1002, 719, 553]],
+ 34 => [[5253, 4134, 2949, 2301], [3183, 2506, 1787, 1394], [2188, 1722, 1228, 958], [1347, 1060, 756, 590]],
+ 35 => [[5529, 4343, 3081, 2361], [3351, 2632, 1867, 1431], [2303, 1809, 1283, 983], [1417, 1113, 790, 605]],
+ 36 => [[5836, 4588, 3244, 2524], [3537, 2780, 1966, 1530], [2431, 1911, 1351, 1051], [1496, 1176, 832, 647]],
+ 37 => [[6153, 4775, 3417, 2625], [3729, 2894, 2071, 1591], [2563, 1989, 1423, 1093], [1577, 1224, 876, 673]],
+ 38 => [[6479, 5039, 3599, 2735], [3927, 3054, 2181, 1658], [2699, 2099, 1499, 1139], [1661, 1292, 923, 701]],
+ 39 => [[6743, 5313, 3791, 2927], [4087, 3220, 2298, 1774], [2809, 2213, 1579, 1219], [1729, 1362, 972, 750]],
+ 40 => [[7089, 5596, 3993, 3057], [4296, 3391, 2420, 1852], [2953, 2331, 1663, 1273], [1817, 1435, 1024, 784]],
+ ];
+
+ /**
+ * ISO/IEC 18004:2000 Tables 13-22
+ *
+ * @see http://www.thonky.com/qr-code-tutorial/error-correction-table
+ */
+ private const RSBLOCKS = [
+ 1 => [[ 7, [[ 1, 19], [ 0, 0]]], [10, [[ 1, 16], [ 0, 0]]], [13, [[ 1, 13], [ 0, 0]]], [17, [[ 1, 9], [ 0, 0]]]],
+ 2 => [[10, [[ 1, 34], [ 0, 0]]], [16, [[ 1, 28], [ 0, 0]]], [22, [[ 1, 22], [ 0, 0]]], [28, [[ 1, 16], [ 0, 0]]]],
+ 3 => [[15, [[ 1, 55], [ 0, 0]]], [26, [[ 1, 44], [ 0, 0]]], [18, [[ 2, 17], [ 0, 0]]], [22, [[ 2, 13], [ 0, 0]]]],
+ 4 => [[20, [[ 1, 80], [ 0, 0]]], [18, [[ 2, 32], [ 0, 0]]], [26, [[ 2, 24], [ 0, 0]]], [16, [[ 4, 9], [ 0, 0]]]],
+ 5 => [[26, [[ 1, 108], [ 0, 0]]], [24, [[ 2, 43], [ 0, 0]]], [18, [[ 2, 15], [ 2, 16]]], [22, [[ 2, 11], [ 2, 12]]]],
+ 6 => [[18, [[ 2, 68], [ 0, 0]]], [16, [[ 4, 27], [ 0, 0]]], [24, [[ 4, 19], [ 0, 0]]], [28, [[ 4, 15], [ 0, 0]]]],
+ 7 => [[20, [[ 2, 78], [ 0, 0]]], [18, [[ 4, 31], [ 0, 0]]], [18, [[ 2, 14], [ 4, 15]]], [26, [[ 4, 13], [ 1, 14]]]],
+ 8 => [[24, [[ 2, 97], [ 0, 0]]], [22, [[ 2, 38], [ 2, 39]]], [22, [[ 4, 18], [ 2, 19]]], [26, [[ 4, 14], [ 2, 15]]]],
+ 9 => [[30, [[ 2, 116], [ 0, 0]]], [22, [[ 3, 36], [ 2, 37]]], [20, [[ 4, 16], [ 4, 17]]], [24, [[ 4, 12], [ 4, 13]]]],
+ 10 => [[18, [[ 2, 68], [ 2, 69]]], [26, [[ 4, 43], [ 1, 44]]], [24, [[ 6, 19], [ 2, 20]]], [28, [[ 6, 15], [ 2, 16]]]],
+ 11 => [[20, [[ 4, 81], [ 0, 0]]], [30, [[ 1, 50], [ 4, 51]]], [28, [[ 4, 22], [ 4, 23]]], [24, [[ 3, 12], [ 8, 13]]]],
+ 12 => [[24, [[ 2, 92], [ 2, 93]]], [22, [[ 6, 36], [ 2, 37]]], [26, [[ 4, 20], [ 6, 21]]], [28, [[ 7, 14], [ 4, 15]]]],
+ 13 => [[26, [[ 4, 107], [ 0, 0]]], [22, [[ 8, 37], [ 1, 38]]], [24, [[ 8, 20], [ 4, 21]]], [22, [[12, 11], [ 4, 12]]]],
+ 14 => [[30, [[ 3, 115], [ 1, 116]]], [24, [[ 4, 40], [ 5, 41]]], [20, [[11, 16], [ 5, 17]]], [24, [[11, 12], [ 5, 13]]]],
+ 15 => [[22, [[ 5, 87], [ 1, 88]]], [24, [[ 5, 41], [ 5, 42]]], [30, [[ 5, 24], [ 7, 25]]], [24, [[11, 12], [ 7, 13]]]],
+ 16 => [[24, [[ 5, 98], [ 1, 99]]], [28, [[ 7, 45], [ 3, 46]]], [24, [[15, 19], [ 2, 20]]], [30, [[ 3, 15], [13, 16]]]],
+ 17 => [[28, [[ 1, 107], [ 5, 108]]], [28, [[10, 46], [ 1, 47]]], [28, [[ 1, 22], [15, 23]]], [28, [[ 2, 14], [17, 15]]]],
+ 18 => [[30, [[ 5, 120], [ 1, 121]]], [26, [[ 9, 43], [ 4, 44]]], [28, [[17, 22], [ 1, 23]]], [28, [[ 2, 14], [19, 15]]]],
+ 19 => [[28, [[ 3, 113], [ 4, 114]]], [26, [[ 3, 44], [11, 45]]], [26, [[17, 21], [ 4, 22]]], [26, [[ 9, 13], [16, 14]]]],
+ 20 => [[28, [[ 3, 107], [ 5, 108]]], [26, [[ 3, 41], [13, 42]]], [30, [[15, 24], [ 5, 25]]], [28, [[15, 15], [10, 16]]]],
+ 21 => [[28, [[ 4, 116], [ 4, 117]]], [26, [[17, 42], [ 0, 0]]], [28, [[17, 22], [ 6, 23]]], [30, [[19, 16], [ 6, 17]]]],
+ 22 => [[28, [[ 2, 111], [ 7, 112]]], [28, [[17, 46], [ 0, 0]]], [30, [[ 7, 24], [16, 25]]], [24, [[34, 13], [ 0, 0]]]],
+ 23 => [[30, [[ 4, 121], [ 5, 122]]], [28, [[ 4, 47], [14, 48]]], [30, [[11, 24], [14, 25]]], [30, [[16, 15], [14, 16]]]],
+ 24 => [[30, [[ 6, 117], [ 4, 118]]], [28, [[ 6, 45], [14, 46]]], [30, [[11, 24], [16, 25]]], [30, [[30, 16], [ 2, 17]]]],
+ 25 => [[26, [[ 8, 106], [ 4, 107]]], [28, [[ 8, 47], [13, 48]]], [30, [[ 7, 24], [22, 25]]], [30, [[22, 15], [13, 16]]]],
+ 26 => [[28, [[10, 114], [ 2, 115]]], [28, [[19, 46], [ 4, 47]]], [28, [[28, 22], [ 6, 23]]], [30, [[33, 16], [ 4, 17]]]],
+ 27 => [[30, [[ 8, 122], [ 4, 123]]], [28, [[22, 45], [ 3, 46]]], [30, [[ 8, 23], [26, 24]]], [30, [[12, 15], [28, 16]]]],
+ 28 => [[30, [[ 3, 117], [10, 118]]], [28, [[ 3, 45], [23, 46]]], [30, [[ 4, 24], [31, 25]]], [30, [[11, 15], [31, 16]]]],
+ 29 => [[30, [[ 7, 116], [ 7, 117]]], [28, [[21, 45], [ 7, 46]]], [30, [[ 1, 23], [37, 24]]], [30, [[19, 15], [26, 16]]]],
+ 30 => [[30, [[ 5, 115], [10, 116]]], [28, [[19, 47], [10, 48]]], [30, [[15, 24], [25, 25]]], [30, [[23, 15], [25, 16]]]],
+ 31 => [[30, [[13, 115], [ 3, 116]]], [28, [[ 2, 46], [29, 47]]], [30, [[42, 24], [ 1, 25]]], [30, [[23, 15], [28, 16]]]],
+ 32 => [[30, [[17, 115], [ 0, 0]]], [28, [[10, 46], [23, 47]]], [30, [[10, 24], [35, 25]]], [30, [[19, 15], [35, 16]]]],
+ 33 => [[30, [[17, 115], [ 1, 116]]], [28, [[14, 46], [21, 47]]], [30, [[29, 24], [19, 25]]], [30, [[11, 15], [46, 16]]]],
+ 34 => [[30, [[13, 115], [ 6, 116]]], [28, [[14, 46], [23, 47]]], [30, [[44, 24], [ 7, 25]]], [30, [[59, 16], [ 1, 17]]]],
+ 35 => [[30, [[12, 121], [ 7, 122]]], [28, [[12, 47], [26, 48]]], [30, [[39, 24], [14, 25]]], [30, [[22, 15], [41, 16]]]],
+ 36 => [[30, [[ 6, 121], [14, 122]]], [28, [[ 6, 47], [34, 48]]], [30, [[46, 24], [10, 25]]], [30, [[ 2, 15], [64, 16]]]],
+ 37 => [[30, [[17, 122], [ 4, 123]]], [28, [[29, 46], [14, 47]]], [30, [[49, 24], [10, 25]]], [30, [[24, 15], [46, 16]]]],
+ 38 => [[30, [[ 4, 122], [18, 123]]], [28, [[13, 46], [32, 47]]], [30, [[48, 24], [14, 25]]], [30, [[42, 15], [32, 16]]]],
+ 39 => [[30, [[20, 117], [ 4, 118]]], [28, [[40, 47], [ 7, 48]]], [30, [[43, 24], [22, 25]]], [30, [[10, 15], [67, 16]]]],
+ 40 => [[30, [[19, 118], [ 6, 119]]], [28, [[18, 47], [31, 48]]], [30, [[34, 24], [34, 25]]], [30, [[20, 15], [61, 16]]]],
+ ];
+
+ private const TOTAL_CODEWORDS = [
+ 1 => 26,
+ 2 => 44,
+ 3 => 70,
+ 4 => 100,
+ 5 => 134,
+ 6 => 172,
+ 7 => 196,
+ 8 => 242,
+ 9 => 292,
+ 10 => 346,
+ 11 => 404,
+ 12 => 466,
+ 13 => 532,
+ 14 => 581,
+ 15 => 655,
+ 16 => 733,
+ 17 => 815,
+ 18 => 901,
+ 19 => 991,
+ 20 => 1085,
+ 21 => 1156,
+ 22 => 1258,
+ 23 => 1364,
+ 24 => 1474,
+ 25 => 1588,
+ 26 => 1706,
+ 27 => 1828,
+ 28 => 1921,
+ 29 => 2051,
+ 30 => 2185,
+ 31 => 2323,
+ 32 => 2465,
+ 33 => 2611,
+ 34 => 2761,
+ 35 => 2876,
+ 36 => 3034,
+ 37 => 3196,
+ 38 => 3362,
+ 39 => 3532,
+ 40 => 3706,
+ ];
+
+ /**
+ * QR Code version number
+ */
+ private int $version;
+
+ /**
+ * Version constructor.
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ public function __construct(int $version){
+
+ if($version < 1 || $version > 40){
+ throw new QRCodeException('invalid version number');
+ }
+
+ $this->version = $version;
+ }
+
+ /**
+ * returns the current version number as string
+ */
+ public function __toString():string{
+ return (string)$this->version;
+ }
+
+ /**
+ * returns the current version number
+ */
+ public function getVersionNumber():int{
+ return $this->version;
+ }
+
+ /**
+ * the matrix size for the given version
+ */
+ public function getDimension():int{
+ return $this->version * 4 + 17;
+ }
+
+ /**
+ * the version pattern for the given version
+ */
+ public function getVersionPattern():?int{
+ return self::VERSION_PATTERN[$this->version] ?? null;
+ }
+
+ /**
+ * the alignment patterns for the current version
+ *
+ * @return int[]
+ */
+ public function getAlignmentPattern():array{
+ return self::ALIGNMENT_PATTERN[$this->version];
+ }
+
+ /**
+ * the maximum character count for the given $mode and $eccLevel
+ */
+ public function getMaxLengthForMode(int $mode, EccLevel $eccLevel):?int{
+ return self::MAX_LENGTH[$this->version][Mode::DATA_MODES[$mode]][$eccLevel->getOrdinal()] ?? null;
+ }
+
+ /**
+ * returns ECC block information for the given $version and $eccLevel
+ */
+ public function getRSBlocks(EccLevel $eccLevel):array{
+ return self::RSBLOCKS[$this->version][$eccLevel->getOrdinal()];
+ }
+
+ /**
+ * returns the maximum codewords for the current version
+ */
+ public function getTotalCodewords():int{
+ return self::TOTAL_CODEWORDS[$this->version];
+ }
+
+}
diff --git a/src/Data/AlphaNum.php b/src/Data/AlphaNum.php
new file mode 100644
index 000000000..409351cbe
--- /dev/null
+++ b/src/Data/AlphaNum.php
@@ -0,0 +1,144 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\Common\{BitBuffer, Mode};
+
+use function array_flip, ceil, ord, sprintf, str_split;
+
+/**
+ * Alphanumeric mode: 0 to 9, A to Z, space, $ % * + - . / :
+ *
+ * ISO/IEC 18004:2000 Section 8.3.3
+ * ISO/IEC 18004:2000 Section 8.4.3
+ */
+final class AlphaNum extends QRDataModeAbstract{
+
+ /**
+ * ISO/IEC 18004:2000 Table 5
+ *
+ * @var int[]
+ */
+ private const CHAR_MAP_ALPHANUM = [
+ '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7,
+ '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15,
+ 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, 'N' => 23,
+ 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31,
+ 'W' => 32, 'X' => 33, 'Y' => 34, 'Z' => 35, ' ' => 36, '$' => 37, '%' => 38, '*' => 39,
+ '+' => 40, '-' => 41, '.' => 42, '/' => 43, ':' => 44,
+ ];
+
+ protected static int $datamode = Mode::DATA_ALPHANUM;
+
+ /**
+ * @inheritdoc
+ */
+ public function getLengthInBits():int{
+ return (int)ceil($this->getCharCount() * (11 / 2));
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public static function validateString(string $string):bool{
+
+ foreach(str_split($string) as $chr){
+ if(!isset(self::CHAR_MAP_ALPHANUM[$chr])){
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function write(BitBuffer $bitBuffer, int $versionNumber):void{
+ $len = $this->getCharCount();
+
+ $bitBuffer
+ ->put($this::$datamode, 4)
+ ->put($len, Mode::getLengthBitsForVersion($this::$datamode, $versionNumber))
+ ;
+
+ // encode 2 characters in 11 bits
+ for($i = 0; $i + 1 < $len; $i += 2){
+ $bitBuffer->put($this->getCharCode($this->data[$i]) * 45 + $this->getCharCode($this->data[$i + 1]), 11);
+ }
+
+ // encode a remaining character in 6 bits
+ if($i < $len){
+ $bitBuffer->put($this->getCharCode($this->data[$i]), 6);
+ }
+
+ }
+
+ /**
+ * get the code for the given character
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException on an illegal character occurence
+ */
+ protected function getCharCode(string $chr):int{
+
+ if(!isset(self::CHAR_MAP_ALPHANUM[$chr])){
+ throw new QRCodeDataException(sprintf('illegal char: "%s" [%d]', $chr, ord($chr)));
+ }
+
+ return self::CHAR_MAP_ALPHANUM[$chr];
+ }
+
+ /**
+ * @inheritdoc
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
+ $length = $bitBuffer->read(Mode::getLengthBitsForVersion(self::$datamode, $versionNumber));
+ $charmap = array_flip(self::CHAR_MAP_ALPHANUM);
+
+ // @todo
+ $toAlphaNumericChar = function(int $ord) use ($charmap):string{
+
+ if(isset($charmap[$ord])){
+ return $charmap[$ord];
+ }
+
+ throw new QRCodeDataException('invalid character value: '.$ord);
+ };
+
+ $result = '';
+ // Read two characters at a time
+ while($length > 1){
+
+ if($bitBuffer->available() < 11){
+ throw new QRCodeDataException('not enough bits available');
+ }
+
+ $nextTwoCharsBits = $bitBuffer->read(11);
+ $result .= $toAlphaNumericChar($nextTwoCharsBits / 45);
+ $result .= $toAlphaNumericChar($nextTwoCharsBits % 45);
+ $length -= 2;
+ }
+
+ if($length === 1){
+ // special case: one character left
+ if($bitBuffer->available() < 6){
+ throw new QRCodeDataException('not enough bits available');
+ }
+
+ $result .= $toAlphaNumericChar($bitBuffer->read(6));
+ }
+
+ return $result;
+ }
+
+}
diff --git a/src/Data/Byte.php b/src/Data/Byte.php
new file mode 100644
index 000000000..06963e21e
--- /dev/null
+++ b/src/Data/Byte.php
@@ -0,0 +1,82 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\Common\{BitBuffer, Mode};
+
+use function ord;
+
+/**
+ * Byte mode, ISO-8859-1 or UTF-8
+ *
+ * ISO/IEC 18004:2000 Section 8.3.4
+ * ISO/IEC 18004:2000 Section 8.4.4
+ */
+final class Byte extends QRDataModeAbstract{
+
+ protected static int $datamode = Mode::DATA_BYTE;
+
+ /**
+ * @inheritdoc
+ */
+ public function getLengthInBits():int{
+ return $this->getCharCount() * 8;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public static function validateString(string $string):bool{
+ return !empty($string);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function write(BitBuffer $bitBuffer, int $versionNumber):void{
+ $len = $this->getCharCount();
+
+ $bitBuffer
+ ->put($this::$datamode, 4)
+ ->put($len, Mode::getLengthBitsForVersion($this::$datamode, $versionNumber))
+ ;
+
+ $i = 0;
+
+ while($i < $len){
+ $bitBuffer->put(ord($this->data[$i]), 8);
+ $i++;
+ }
+
+ }
+
+ /**
+ * @inheritdoc
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
+ $length = $bitBuffer->read(Mode::getLengthBitsForVersion(self::$datamode, $versionNumber));
+
+ if($bitBuffer->available() < 8 * $length){
+ throw new QRCodeDataException('not enough bits available');
+ }
+
+ $readBytes = '';
+
+ for($i = 0; $i < $length; $i++){
+ $readBytes .= \chr($bitBuffer->read(8));
+ }
+
+ return $readBytes;
+ }
+
+}
diff --git a/src/Data/ECI.php b/src/Data/ECI.php
new file mode 100644
index 000000000..86fe22e0a
--- /dev/null
+++ b/src/Data/ECI.php
@@ -0,0 +1,92 @@
+
+ * @copyright 2020 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\Common\{BitBuffer, ECICharset, Mode};
+
+/**
+ * Adds an ECI Designator
+ *
+ * Please note that you have to take care for the correct data encoding when adding with QRCode::add*Segment()
+ */
+final class ECI extends QRDataModeAbstract{
+
+ protected static int $datamode = Mode::DATA_ECI;
+
+ /**
+ * The current ECI encoding id
+ */
+ private int $encoding;
+
+ /**
+ * @inheritDoc
+ * @noinspection PhpMissingParentConstructorInspection
+ */
+ public function __construct(int $encoding){
+ $this->encoding = $encoding;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getLengthInBits():int{
+ return 8;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function write(BitBuffer $bitBuffer, int $versionNumber):void{
+ $bitBuffer
+ ->put($this::$datamode, 4)
+ ->put($this->encoding, 8)
+ ;
+ }
+
+ /**
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public static function parseValue(BitBuffer $bitBuffer):ECICharset{
+ $firstByte = $bitBuffer->read(8);
+
+ if(($firstByte & 0x80) === 0){
+ // just one byte
+ return new ECICharset($firstByte & 0x7f);
+ }
+
+ if(($firstByte & 0xc0) === 0x80){
+ // two bytes
+ return new ECICharset((($firstByte & 0x3f) << 8) | $bitBuffer->read(8));
+ }
+
+ if(($firstByte & 0xe0) === 0xC0){
+ // three bytes
+ return new ECICharset((($firstByte & 0x1f) << 16) | $bitBuffer->read(16));
+ }
+
+ throw new QRCodeDataException('error decoding ECI value');
+ }
+
+ /**
+ * @codeCoverageIgnore Unused, but required as per interface
+ */
+ public static function validateString(string $string):bool{
+ return true;
+ }
+
+ /**
+ * @codeCoverageIgnore Unused, but required as per interface
+ */
+ public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
+ return '';
+ }
+
+}
diff --git a/src/Data/Kanji.php b/src/Data/Kanji.php
new file mode 100644
index 000000000..e9664d4a4
--- /dev/null
+++ b/src/Data/Kanji.php
@@ -0,0 +1,140 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\Common\{BitBuffer, Mode};
+
+use function chr, implode, mb_convert_encoding, mb_detect_encoding, mb_internal_encoding, mb_strlen, ord, sprintf, strlen;
+
+/**
+ * Kanji mode: double-byte characters from the Shift JIS character set
+ *
+ * ISO/IEC 18004:2000 Section 8.3.5
+ * ISO/IEC 18004:2000 Section 8.4.5
+ */
+final class Kanji extends QRDataModeAbstract{
+
+ protected static int $datamode = Mode::DATA_KANJI;
+
+ /**
+ *
+ */
+ public function __construct(string $data){
+ parent::__construct($data);
+
+ /** @noinspection PhpFieldAssignmentTypeMismatchInspection */
+ $this->data = mb_convert_encoding($this->data, 'SJIS', mb_detect_encoding($this->data));
+ }
+
+ /**
+ * @inheritdoc
+ */
+ protected function getCharCount():int{
+ return mb_strlen($this->data, 'SJIS');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getLengthInBits():int{
+ return $this->getCharCount() * 13;
+ }
+
+ /**
+ * checks if a string qualifies as Kanji
+ */
+ public static function validateString(string $string):bool{
+ $i = 0;
+ $len = strlen($string);
+
+ while($i + 1 < $len){
+ $c = ((0xff & ord($string[$i])) << 8) | (0xff & ord($string[$i + 1]));
+
+ if(!($c >= 0x8140 && $c <= 0x9ffc) && !($c >= 0xe040 && $c <= 0xebbf)){
+ return false;
+ }
+
+ $i += 2;
+ }
+
+ return $i >= $len;
+ }
+
+ /**
+ * @inheritdoc
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException on an illegal character occurence
+ */
+ public function write(BitBuffer $bitBuffer, int $versionNumber):void{
+
+ $bitBuffer
+ ->put($this::$datamode, 4)
+ ->put($this->getCharCount(), Mode::getLengthBitsForVersion($this::$datamode, $versionNumber))
+ ;
+
+ $len = strlen($this->data);
+
+ for($i = 0; $i + 1 < $len; $i += 2){
+ $c = ((0xff & ord($this->data[$i])) << 8) | (0xff & ord($this->data[$i + 1]));
+
+ if($c >= 0x8140 && $c <= 0x9ffC){
+ $c -= 0x8140;
+ }
+ elseif($c >= 0xe040 && $c <= 0xebbf){
+ $c -= 0xc140;
+ }
+ else{
+ throw new QRCodeDataException(sprintf('illegal char at %d [%d]', $i + 1, $c));
+ }
+
+ $bitBuffer->put(((($c >> 8) & 0xff) * 0xc0) + ($c & 0xff), 13);
+ }
+
+ if($i < $len){
+ throw new QRCodeDataException(sprintf('illegal char at %d', $i + 1));
+ }
+
+ }
+
+ /**
+ * @inheritdoc
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
+ $length = $bitBuffer->read(Mode::getLengthBitsForVersion(self::$datamode, $versionNumber));
+
+ if($bitBuffer->available() < $length * 13){
+ throw new QRCodeDataException('not enough bits available');
+ }
+
+ $buffer = [];
+ $offset = 0;
+
+ while($length > 0){
+ // Each 13 bits encodes a 2-byte character
+ $twoBytes = $bitBuffer->read(13);
+ $assembledTwoBytes = (($twoBytes / 0x0c0) << 8) | ($twoBytes % 0x0c0);
+
+ $assembledTwoBytes += ($assembledTwoBytes < 0x01f00)
+ ? 0x08140 // In the 0x8140 to 0x9FFC range
+ : 0x0c140; // In the 0xE040 to 0xEBBF range
+
+ $buffer[$offset] = chr(0xff & ($assembledTwoBytes >> 8));
+ $buffer[$offset + 1] = chr(0xff & $assembledTwoBytes);
+ $offset += 2;
+ $length--;
+ }
+
+ return mb_convert_encoding(implode($buffer), mb_internal_encoding(), 'SJIS');
+ }
+
+}
diff --git a/src/Data/Number.php b/src/Data/Number.php
new file mode 100644
index 000000000..46fac07a7
--- /dev/null
+++ b/src/Data/Number.php
@@ -0,0 +1,184 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\Common\{BitBuffer, Mode};
+
+use function array_flip, ceil, ord, sprintf, str_split, substr;
+
+/**
+ * Numeric mode: decimal digits 0 to 9
+ *
+ * ISO/IEC 18004:2000 Section 8.3.2
+ * ISO/IEC 18004:2000 Section 8.4.2
+ */
+final class Number extends QRDataModeAbstract{
+
+ /**
+ * @var int[]
+ */
+ private const CHAR_MAP_NUMBER = [
+ '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9,
+ ];
+
+ protected static int $datamode = Mode::DATA_NUMBER;
+
+ /**
+ * @inheritdoc
+ */
+ public function getLengthInBits():int{
+ return (int)ceil($this->getCharCount() * (10 / 3));
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public static function validateString(string $string):bool{
+
+ foreach(str_split($string) as $chr){
+ if(!isset(self::CHAR_MAP_NUMBER[$chr])){
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function write(BitBuffer $bitBuffer, int $versionNumber):void{
+ $len = $this->getCharCount();
+
+ $bitBuffer
+ ->put($this::$datamode, 4)
+ ->put($len, Mode::getLengthBitsForVersion($this::$datamode, $versionNumber))
+ ;
+
+ $i = 0;
+
+ // encode numeric triplets in 10 bits
+ while($i + 2 < $len){
+ $bitBuffer->put($this->parseInt(substr($this->data, $i, 3)), 10);
+ $i += 3;
+ }
+
+ if($i < $len){
+
+ // encode 2 remaining numbers in 7 bits
+ if($len - $i === 2){
+ $bitBuffer->put($this->parseInt(substr($this->data, $i, 2)), 7);
+ }
+ // encode one remaining number in 4 bits
+ elseif($len - $i === 1){
+ $bitBuffer->put($this->parseInt(substr($this->data, $i, 1)), 4);
+ }
+
+ }
+
+ }
+
+ /**
+ * get the code for the given numeric string
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException on an illegal character occurence
+ */
+ protected function parseInt(string $string):int{
+ $num = 0;
+
+ foreach(str_split($string) as $chr){
+ $c = ord($chr);
+
+ if(!isset(self::CHAR_MAP_NUMBER[$chr])){
+ throw new QRCodeDataException(sprintf('illegal char: "%s" [%d]', $chr, $c));
+ }
+
+ $c = $c - 48; // ord('0')
+ $num = $num * 10 + $c;
+ }
+
+ return $num;
+ }
+
+ /**
+ * @inheritdoc
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
+ $length = $bitBuffer->read(Mode::getLengthBitsForVersion(self::$datamode, $versionNumber));
+ $charmap = array_flip(self::CHAR_MAP_NUMBER);
+
+ // @todo
+ $toNumericChar = function(int $ord) use ($charmap):string{
+
+ if(isset($charmap[$ord])){
+ return $charmap[$ord];
+ }
+
+ throw new QRCodeDataException('invalid character value: '.$ord);
+ };
+
+ $result = '';
+ // Read three digits at a time
+ while($length >= 3){
+ // Each 10 bits encodes three digits
+ if($bitBuffer->available() < 10){
+ throw new QRCodeDataException('not enough bits available');
+ }
+
+ $threeDigitsBits = $bitBuffer->read(10);
+
+ if($threeDigitsBits >= 1000){
+ throw new QRCodeDataException('error decoding numeric value');
+ }
+
+ $result .= $toNumericChar($threeDigitsBits / 100);
+ $result .= $toNumericChar(($threeDigitsBits / 10) % 10);
+ $result .= $toNumericChar($threeDigitsBits % 10);
+
+ $length -= 3;
+ }
+
+ if($length === 2){
+ // Two digits left over to read, encoded in 7 bits
+ if($bitBuffer->available() < 7){
+ throw new QRCodeDataException('not enough bits available');
+ }
+
+ $twoDigitsBits = $bitBuffer->read(7);
+
+ if($twoDigitsBits >= 100){
+ throw new QRCodeDataException('error decoding numeric value');
+ }
+
+ $result .= $toNumericChar($twoDigitsBits / 10);
+ $result .= $toNumericChar($twoDigitsBits % 10);
+ }
+ elseif($length === 1){
+ // One digit left over to read
+ if($bitBuffer->available() < 4){
+ throw new QRCodeDataException('not enough bits available');
+ }
+
+ $digitBits = $bitBuffer->read(4);
+
+ if($digitBits >= 10){
+ throw new QRCodeDataException('error decoding numeric value');
+ }
+
+ $result .= $toNumericChar($digitBits);
+ }
+
+ return $result;
+ }
+
+}
diff --git a/src/Data/QRCodeDataException.php b/src/Data/QRCodeDataException.php
new file mode 100644
index 000000000..b260e4942
--- /dev/null
+++ b/src/Data/QRCodeDataException.php
@@ -0,0 +1,15 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\QRCodeException;
+
+class QRCodeDataException extends QRCodeException{}
diff --git a/src/Data/QRData.php b/src/Data/QRData.php
new file mode 100644
index 000000000..9b28d0d8b
--- /dev/null
+++ b/src/Data/QRData.php
@@ -0,0 +1,213 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\Common\{BitBuffer, EccLevel, MaskPattern, Mode, ReedSolomonEncoder, Version};
+use chillerlan\QRCode\QRCode;
+use chillerlan\Settings\SettingsContainerInterface;
+
+use function range, sprintf;
+
+/**
+ * Processes the binary data and maps it on a matrix which is then being returned
+ */
+final class QRData{
+
+ /**
+ * the options instance
+ *
+ * @var \chillerlan\Settings\SettingsContainerInterface|\chillerlan\QRCode\QROptions
+ */
+ private SettingsContainerInterface $options;
+
+ /**
+ * a BitBuffer instance
+ */
+ private BitBuffer $bitBuffer;
+
+ /**
+ * an EccLevel instance
+ */
+ private EccLevel $eccLevel;
+
+ /**
+ * current QR Code version
+ */
+ private Version $version;
+
+ /**
+ * @var \chillerlan\QRCode\Data\QRDataModeInterface[]
+ */
+ private array $dataSegments = [];
+
+ /**
+ * Max bits for the current ECC mode
+ *
+ * @var int[]
+ */
+ private array $maxBitsForEcc;
+
+ /**
+ * QRData constructor.
+ *
+ * @param \chillerlan\Settings\SettingsContainerInterface $options
+ * @param \chillerlan\QRCode\Data\QRDataModeInterface[]|null $dataSegments
+ */
+ public function __construct(SettingsContainerInterface $options, array $dataSegments = null){
+ $this->options = $options;
+ $this->bitBuffer = new BitBuffer;
+ $this->eccLevel = new EccLevel($this->options->eccLevel);
+ $this->maxBitsForEcc = $this->eccLevel->getMaxBits();
+
+ if(!empty($dataSegments)){
+ $this->setData($dataSegments);
+ }
+
+ }
+
+ /**
+ * Sets the data string (internally called by the constructor)
+ */
+ public function setData(array $dataSegments):self{
+ $this->dataSegments = $dataSegments;
+
+ $version = $this->options->version === QRCode::VERSION_AUTO
+ ? $this->getMinimumVersion()
+ : $this->options->version;
+
+ $this->version = new Version($version);
+
+ $this->writeBitBuffer();
+
+ return $this;
+ }
+
+ /**
+ * returns a fresh matrix object with the data written for the given $maskPattern
+ */
+ public function writeMatrix(MaskPattern $maskPattern, bool $test = null):QRMatrix{
+ $data = (new ReedSolomonEncoder)->interleaveEcBytes($this->bitBuffer, $this->version, $this->eccLevel);
+
+ return (new QRMatrix($this->version, $this->eccLevel))
+ ->init($maskPattern, $test)
+ ->mapData($data)
+ ->mask($maskPattern)
+ ;
+ }
+
+ /**
+ * estimates the total length of the several mode segments in order to guess the minimum version
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ private function estimateTotalBitLength():int{
+ $length = 0;
+ $margin = 0;
+
+ foreach($this->dataSegments as $segment){
+ // data length in bits of the current segment +4 bits for each mode descriptor
+ $length += ($segment->getLengthInBits() + Mode::getLengthBitsForMode($segment->getDataMode())[0] + 4);
+
+ if(!$segment instanceof ECI){
+ // mode length bits margin to the next breakpoint
+ $margin += ($segment instanceof Byte ? 8 : 2);
+ }
+ }
+
+ foreach([9, 26, 40] as $breakpoint){
+
+ // length bits for the first breakpoint have already been added
+ if($breakpoint > 9){
+ $length += $margin;
+ }
+
+ if($length < $this->maxBitsForEcc[$breakpoint]){
+ return $length;
+ }
+ }
+
+ throw new QRCodeDataException(sprintf('estimated data exceeds %d bits', $length));
+ }
+
+ /**
+ * returns the minimum version number for the given string
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ private function getMinimumVersion():int{
+ $total = $this->estimateTotalBitLength();
+
+ // guess the version number within the given range
+ foreach(range($this->options->versionMin, $this->options->versionMax) as $version){
+
+ if($total <= $this->maxBitsForEcc[$version]){
+ return $version;
+ }
+ }
+
+ // it's almost impossible to run into this one as $this::estimateTotalBitLength() would throw first
+ throw new QRCodeDataException('failed to guess minimum version'); // @codeCoverageIgnore
+ }
+
+ /**
+ * creates a BitBuffer and writes the string data to it
+ *
+ * @throws \chillerlan\QRCode\QRCodeException on data overflow
+ */
+ private function writeBitBuffer():void{
+ $version = $this->version->getVersionNumber();
+ $MAX_BITS = $this->maxBitsForEcc[$version];
+
+ foreach($this->dataSegments as $segment){
+ $segment->write($this->bitBuffer, $version);
+ }
+
+ // overflow, likely caused due to invalid version setting
+ if($this->bitBuffer->getLength() > $MAX_BITS){
+ throw new QRCodeDataException(
+ sprintf('code length overflow. (%d > %d bit)', $this->bitBuffer->getLength(), $MAX_BITS)
+ );
+ }
+
+ // add terminator (ISO/IEC 18004:2000 Table 2)
+ if($this->bitBuffer->getLength() + 4 <= $MAX_BITS){
+ $this->bitBuffer->put(0b0000, 4);
+ }
+
+ // Padding: ISO/IEC 18004:2000 8.4.9 Bit stream to codeword conversion
+
+ // if the final codeword is not exactly 8 bits in length, it shall be made 8 bits long
+ // by the addition of padding bits with binary value 0
+ while($this->bitBuffer->getLength() % 8 !== 0){
+ $this->bitBuffer->putBit(false);
+ }
+
+ // The message bit stream shall then be extended to fill the data capacity of the symbol
+ // corresponding to the Version and Error Correction Level, by the addition of the Pad
+ // Codewords 11101100 and 00010001 alternately.
+ while(true){
+
+ if($this->bitBuffer->getLength() >= $MAX_BITS){
+ break;
+ }
+
+ $this->bitBuffer->put(0b11101100, 8);
+
+ if($this->bitBuffer->getLength() >= $MAX_BITS){
+ break;
+ }
+
+ $this->bitBuffer->put(0b00010001, 8);
+ }
+
+ }
+
+}
diff --git a/src/Data/QRDataModeAbstract.php b/src/Data/QRDataModeAbstract.php
new file mode 100644
index 000000000..9f1211162
--- /dev/null
+++ b/src/Data/QRDataModeAbstract.php
@@ -0,0 +1,48 @@
+
+ * @copyright 2020 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+/**
+ */
+abstract class QRDataModeAbstract implements QRDataModeInterface{
+
+ /**
+ * the current data mode: Num, Alphanum, Kanji, Byte
+ */
+ protected static int $datamode;
+
+ /**
+ * The data to write
+ */
+ protected string $data;
+
+ /**
+ * QRDataModeAbstract constructor.
+ */
+ public function __construct(string $data){
+ $this->data = $data;
+ }
+
+ /**
+ * returns the character count of the $data string
+ */
+ protected function getCharCount():int{
+ return strlen($this->data);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getDataMode():int{
+ return $this::$datamode;
+ }
+
+}
diff --git a/src/Data/QRDataModeInterface.php b/src/Data/QRDataModeInterface.php
new file mode 100644
index 000000000..a4729ce30
--- /dev/null
+++ b/src/Data/QRDataModeInterface.php
@@ -0,0 +1,48 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\Common\BitBuffer;
+
+/**
+ * Specifies the methods reqired for the data modules (Number, Alphanum, Byte and Kanji)
+ * and holds version information in several constants
+ */
+interface QRDataModeInterface{
+
+ /**
+ * returns the current data mode constant
+ */
+ public function getDataMode():int;
+
+ /**
+ * retruns the length in bits of the data string
+ */
+ public function getLengthInBits():int;
+
+ /**
+ * checks if the given string qualifies for the encoder module
+ */
+ public static function validateString(string $string):bool;
+
+ /**
+ * writes the actual data string to the BitBuffer, uses the given version to determine the length bits
+ *
+ * @see \chillerlan\QRCode\Data\QRData::writeBitBuffer()
+ */
+ public function write(BitBuffer $bitBuffer, int $versionNumber):void;
+
+ /**
+ * reads a segment from the BitBuffer and decodes in the current data mode
+ */
+ public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string;
+
+}
diff --git a/src/Data/QRMatrix.php b/src/Data/QRMatrix.php
new file mode 100755
index 000000000..d648e8fe3
--- /dev/null
+++ b/src/Data/QRMatrix.php
@@ -0,0 +1,583 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\Common\{EccLevel, MaskPattern, Version};
+
+use SplFixedArray;
+use function array_fill, array_push, array_unshift, floor, max, min, range;
+
+/**
+ * Holds a numerical representation of the final QR Code;
+ * maps the ECC coded binary data and applies the mask pattern
+ *
+ * @see http://www.thonky.com/qr-code-tutorial/format-version-information
+ */
+final class QRMatrix{
+
+ /** @var int */
+ public const M_NULL = 0b000000000000;
+ /** @var int */
+ public const M_DARKMODULE = 0b000000000001;
+ /** @var int */
+ public const M_DATA = 0b000000000010;
+ /** @var int */
+ public const M_FINDER = 0b000000000100;
+ /** @var int */
+ public const M_SEPARATOR = 0b000000001000;
+ /** @var int */
+ public const M_ALIGNMENT = 0b000000010000;
+ /** @var int */
+ public const M_TIMING = 0b000000100000;
+ /** @var int */
+ public const M_FORMAT = 0b000001000000;
+ /** @var int */
+ public const M_VERSION = 0b000010000000;
+ /** @var int */
+ public const M_QUIETZONE = 0b000100000000;
+ /** @var int */
+ public const M_LOGO = 0b001000000000;
+ /** @var int */
+ public const M_FINDER_DOT = 0b010000000000;
+ /** @var int */
+ public const M_TEST = 0b011111111111;
+ /** @var int */
+ public const IS_DARK = 0b100000000000;
+
+ /**
+ * the used mask pattern, set via QRMatrix::mask()
+ */
+ private ?MaskPattern $maskPattern = null;
+
+ /**
+ * the size (side length) of the matrix, including quiet zone (if created)
+ */
+ private int $moduleCount;
+
+ /**
+ * the actual matrix data array
+ *
+ * @var int[][]
+ */
+ private array $matrix;
+
+ /**
+ * the current ECC level
+ */
+ private EccLevel $eccLevel;
+
+ /**
+ * a Version instance
+ */
+ private Version $version;
+
+ /**
+ * QRMatrix constructor.
+ */
+ public function __construct(Version $version, EccLevel $eccLevel){
+ $this->version = $version;
+ $this->eccLevel = $eccLevel;
+ $this->moduleCount = $this->version->getDimension();
+ $this->matrix = array_fill(0, $this->moduleCount, array_fill(0, $this->moduleCount, $this::M_NULL));
+ }
+
+ /**
+ * shortcut to initialize the matrix
+ */
+ public function init(MaskPattern $maskPattern, bool $test = null):self{
+ return $this
+ ->setFinderPattern()
+ ->setSeparators()
+ ->setAlignmentPattern()
+ ->setTimingPattern()
+ ->setVersionNumber($test)
+ ->setFormatInfo($maskPattern, $test)
+ ->setDarkModule()
+ ;
+ }
+
+ /**
+ * Returns the data matrix, returns a pure boolean representation if $boolean is set to true
+ *
+ * @return int[][]|bool[][]
+ */
+ public function matrix(bool $boolean = false):array{
+
+ if(!$boolean){
+ return $this->matrix;
+ }
+
+ $matrix = [];
+
+ foreach($this->matrix as $y => $row){
+ $matrix[$y] = [];
+
+ foreach($row as $x => $val){
+ $matrix[$y][$x] = ($val & $this::IS_DARK) === $this::IS_DARK;
+ }
+ }
+
+ return $matrix;
+ }
+
+ /**
+ * Returns the current version number
+ */
+ public function version():Version{
+ return $this->version;
+ }
+
+ /**
+ * Returns the current ECC level
+ */
+ public function eccLevel():EccLevel{
+ return $this->eccLevel;
+ }
+
+ /**
+ * Returns the current mask pattern
+ */
+ public function maskPattern():?MaskPattern{
+ return $this->maskPattern;
+ }
+
+ /**
+ * Returns the absoulute size of the matrix, including quiet zone (after setting it).
+ *
+ * size = version * 4 + 17 [ + 2 * quietzone size]
+ */
+ public function size():int{
+ return $this->moduleCount;
+ }
+
+ /**
+ * Returns the value of the module at position [$x, $y]
+ */
+ public function get(int $x, int $y):int{
+ return $this->matrix[$y][$x];
+ }
+
+ /**
+ * Sets the $M_TYPE value for the module at position [$x, $y]
+ *
+ * true => $M_TYPE | 0x800
+ * false => $M_TYPE
+ */
+ public function set(int $x, int $y, bool $value, int $M_TYPE):self{
+ $this->matrix[$y][$x] = $M_TYPE | ($value ? $this::IS_DARK : 0);
+
+ return $this;
+ }
+
+ /**
+ * Flips the value of the module
+ */
+ public function flip(int $x, int $y):self{
+ $this->matrix[$y][$x] ^= $this::IS_DARK;
+
+ return $this;
+ }
+
+ /**
+ * Checks whether a module is of the given $M_TYPE
+ *
+ * true => $value & $M_TYPE === $M_TYPE
+ */
+ public function checkType(int $x, int $y, int $M_TYPE):bool{
+ return ($this->matrix[$y][$x] & $M_TYPE) === $M_TYPE;
+ }
+
+ /**
+ * Checks whether a module is true (dark) or false (light)
+ *
+ * true => $value & 0x800 === 0x800
+ * false => $value & 0x800 === 0
+ */
+ public function check(int $x, int $y):bool{
+ return $this->checkType($x, $y, $this::IS_DARK);
+ }
+
+ /**
+ * Sets the "dark module", that is always on the same position 1x1px away from the bottom left finder
+ */
+ public function setDarkModule():self{
+ $this->set(8, 4 * $this->version->getVersionNumber() + 9, true, $this::M_DARKMODULE);
+
+ return $this;
+ }
+
+ /**
+ * Draws the 7x7 finder patterns in the corners top left/right and bottom left
+ *
+ * ISO/IEC 18004:2000 Section 7.3.2
+ */
+ public function setFinderPattern():self{
+
+ $pos = [
+ [0, 0], // top left
+ [$this->moduleCount - 7, 0], // bottom left
+ [0, $this->moduleCount - 7], // top right
+ ];
+
+ foreach($pos as $c){
+ for($y = 0; $y < 7; $y++){
+ for($x = 0; $x < 7; $x++){
+ // outer (dark) 7*7 square
+ if($x === 0 || $x === 6 || $y === 0 || $y === 6){
+ $this->set($c[0] + $y, $c[1] + $x, true, $this::M_FINDER);
+ }
+ // inner (light) 5*5 square
+ elseif($x === 1 || $x === 5 || $y === 1 || $y === 5){
+ $this->set($c[0] + $y, $c[1] + $x, false, $this::M_FINDER);
+ }
+ // 3*3 dot
+ else{
+ $this->set($c[0] + $y, $c[1] + $x, true, $this::M_FINDER_DOT);
+ }
+ }
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Draws the separator lines around the finder patterns
+ *
+ * ISO/IEC 18004:2000 Section 7.3.3
+ */
+ public function setSeparators():self{
+
+ $h = [
+ [7, 0],
+ [$this->moduleCount - 8, 0],
+ [7, $this->moduleCount - 8],
+ ];
+
+ $v = [
+ [7, 7],
+ [$this->moduleCount - 1, 7],
+ [7, $this->moduleCount - 8],
+ ];
+
+ for($c = 0; $c < 3; $c++){
+ for($i = 0; $i < 8; $i++){
+ $this->set($h[$c][0] , $h[$c][1] + $i, false, $this::M_SEPARATOR);
+ $this->set($v[$c][0] - $i, $v[$c][1] , false, $this::M_SEPARATOR);
+ }
+ }
+
+ return $this;
+ }
+
+
+ /**
+ * Draws the 5x5 alignment patterns
+ *
+ * ISO/IEC 18004:2000 Section 7.3.5
+ */
+ public function setAlignmentPattern():self{
+ $alignmentPattern = $this->version->getAlignmentPattern();
+
+ foreach($alignmentPattern as $y){
+ foreach($alignmentPattern as $x){
+
+ // skip existing patterns
+ if($this->matrix[$y][$x] !== $this::M_NULL){
+ continue;
+ }
+
+ for($ry = -2; $ry <= 2; $ry++){
+ for($rx = -2; $rx <= 2; $rx++){
+ $v = ($ry === 0 && $rx === 0) || $ry === 2 || $ry === -2 || $rx === 2 || $rx === -2;
+
+ $this->set($x + $rx, $y + $ry, $v, $this::M_ALIGNMENT);
+ }
+ }
+
+ }
+ }
+
+ return $this;
+ }
+
+
+ /**
+ * Draws the timing pattern (h/v checkered line between the finder patterns)
+ *
+ * ISO/IEC 18004:2000 Section 7.3.4
+ */
+ public function setTimingPattern():self{
+
+ foreach(range(8, $this->moduleCount - 8 - 1) as $i){
+
+ if($this->matrix[6][$i] !== $this::M_NULL || $this->matrix[$i][6] !== $this::M_NULL){
+ continue;
+ }
+
+ $v = $i % 2 === 0;
+
+ $this->set($i, 6, $v, $this::M_TIMING); // h
+ $this->set(6, $i, $v, $this::M_TIMING); // v
+ }
+
+ return $this;
+ }
+
+ /**
+ * Draws the version information, 2x 3x6 pixel
+ *
+ * ISO/IEC 18004:2000 Section 8.10
+ */
+ public function setVersionNumber(bool $test = null):self{
+ $bits = $this->version->getVersionPattern();
+
+ if($bits !== null){
+
+ for($i = 0; $i < 18; $i++){
+ $a = (int)($i / 3);
+ $b = $i % 3 + $this->moduleCount - 8 - 3;
+ $v = !$test && (($bits >> $i) & 1) === 1;
+
+ $this->set($b, $a, $v, $this::M_VERSION); // ne
+ $this->set($a, $b, $v, $this::M_VERSION); // sw
+ }
+
+ }
+
+ return $this;
+ }
+
+ /**
+ * Draws the format info along the finder patterns
+ *
+ * ISO/IEC 18004:2000 Section 8.9
+ */
+ public function setFormatInfo(MaskPattern $maskPattern, bool $test = null):self{
+ $bits = $this->eccLevel->getformatPattern($maskPattern);
+
+ for($i = 0; $i < 15; $i++){
+ $v = !$test && (($bits >> $i) & 1) === 1;
+
+ if($i < 6){
+ $this->set(8, $i, $v, $this::M_FORMAT);
+ }
+ elseif($i < 8){
+ $this->set(8, $i + 1, $v, $this::M_FORMAT);
+ }
+ else{
+ $this->set(8, $this->moduleCount - 15 + $i, $v, $this::M_FORMAT);
+ }
+
+ if($i < 8){
+ $this->set($this->moduleCount - $i - 1, 8, $v, $this::M_FORMAT);
+ }
+ elseif($i < 9){
+ $this->set(15 - $i, 8, $v, $this::M_FORMAT);
+ }
+ else{
+ $this->set(15 - $i - 1, 8, $v, $this::M_FORMAT);
+ }
+
+ }
+
+ $this->set(8, $this->moduleCount - 8, !$test, $this::M_FORMAT);
+
+ return $this;
+ }
+
+ /**
+ * Draws the "quiet zone" of $size around the matrix
+ *
+ * ISO/IEC 18004:2000 Section 7.3.7
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public function setQuietZone(int $size = null):self{
+
+ if($this->matrix[$this->moduleCount - 1][$this->moduleCount - 1] === $this::M_NULL){
+ throw new QRCodeDataException('use only after writing data');
+ }
+
+ $size = $size !== null
+ ? max(0, min($size, floor($this->moduleCount / 2)))
+ : 4;
+
+ for($y = 0; $y < $this->moduleCount; $y++){
+ for($i = 0; $i < $size; $i++){
+ array_unshift($this->matrix[$y], $this::M_QUIETZONE);
+ array_push($this->matrix[$y], $this::M_QUIETZONE);
+ }
+ }
+
+ $this->moduleCount += ($size * 2);
+
+ $r = array_fill(0, $this->moduleCount, $this::M_QUIETZONE);
+
+ for($i = 0; $i < $size; $i++){
+ array_unshift($this->matrix, $r);
+ array_push($this->matrix, $r);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Clears a space of $width * $height in order to add a logo or text.
+ *
+ * Additionally, the logo space can be positioned within the QR Code - respecting the main functional patterns -
+ * using $startX and $startY. If either of these are null, the logo space will be centered in that direction.
+ * ECC level "H" (30%) is required.
+ *
+ * Please note that adding a logo space minimizes the error correction capacity of the QR Code and
+ * created images may become unreadable, especially when printed with a chance to receive damage.
+ * Please test thoroughly before using this feature in production.
+ *
+ * This method should be called from within an output module (after the matrix has been filled with data).
+ * Note that there is no restiction on how many times this method could be called on the same matrix instance.
+ *
+ * @link https://github.com/chillerlan/php-qrcode/issues/52
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public function setLogoSpace(int $width, int $height, int $startX = null, int $startY = null):self{
+
+ // for logos we operate in ECC H (30%) only
+ if($this->eccLevel->getLevel() !== EccLevel::H){
+ throw new QRCodeDataException('ECC level "H" required to add logo space');
+ }
+
+ // we need uneven sizes to center the logo space, adjust if needed
+ if($startX === null && ($width % 2) === 0){
+ $width++;
+ }
+
+ if($startY === null && ($height % 2) === 0){
+ $height++;
+ }
+
+ // $this->moduleCount includes the quiet zone (if created), we need the QR size here
+ $length = $this->version->getDimension();
+
+ // throw if the logo space exceeds the maximum error correction capacity
+ if($width * $height > floor($length * $length * 0.2)){
+ throw new QRCodeDataException('logo space exceeds the maximum error correction capacity');
+ }
+
+ // quiet zone size
+ $qz = ($this->moduleCount - $length) / 2;
+ // skip quiet zone and the first 9 rows/columns (finder-, mode-, version- and timing patterns)
+ $start = $qz + 9;
+ // skip quiet zone
+ $end = $this->moduleCount - $qz;
+
+ // determine start coordinates
+ $startX = ($startX !== null ? $startX : ($length - $width) / 2) + $qz;
+ $startY = ($startY !== null ? $startY : ($length - $height) / 2) + $qz;
+
+ // clear the space
+ foreach($this->matrix as $y => $row){
+ foreach($row as $x => $val){
+ // out of bounds, skip
+ if($x < $start || $y < $start ||$x >= $end || $y >= $end){
+ continue;
+ }
+ // a match
+ if($x >= $startX && $x < ($startX + $width) && $y >= $startY && $y < ($startY + $height)){
+ $this->set($x, $y, false, $this::M_LOGO);
+ }
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Maps the binary $data array from QRData::maskECC() on the matrix,
+ * masking the data using $maskPattern (ISO/IEC 18004:2000 Section 8.8)
+ *
+ * @see \chillerlan\QRCode\Data\QRData::maskECC()
+ *
+ * @param \SplFixedArray $data
+ *
+ * @return \chillerlan\QRCode\Data\QRMatrix
+ */
+ public function mapData(SplFixedArray $data):self{
+ $byteCount = $data->count();
+ $y = $this->moduleCount - 1;
+ $inc = -1;
+ $byteIndex = 0;
+ $bitIndex = 7;
+
+ for($i = $y; $i > 0; $i -= 2){
+
+ if($i === 6){
+ $i--;
+ }
+
+ while(true){
+ for($c = 0; $c < 2; $c++){
+ $x = $i - $c;
+
+ if($this->matrix[$y][$x] === $this::M_NULL){
+ $v = false;
+
+ if($byteIndex < $byteCount){
+ $v = (($data[$byteIndex] >> $bitIndex) & 1) === 1;
+ }
+
+ $this->matrix[$y][$x] = $this::M_DATA | ($v ? $this::IS_DARK : 0);
+ $bitIndex--;
+
+ if($bitIndex === -1){
+ $byteIndex++;
+ $bitIndex = 7;
+ }
+
+ }
+ }
+
+ $y += $inc;
+
+ if($y < 0 || $this->moduleCount <= $y){
+ $y -= $inc;
+ $inc = -$inc;
+
+ break;
+ }
+
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Applies the mask pattern
+ *
+ * ISO/IEC 18004:2000 Section 8.8.1
+ */
+ public function mask(MaskPattern $maskPattern):self{
+ $this->maskPattern = $maskPattern;
+ $mask = $this->maskPattern->getMask();
+
+ foreach($this->matrix as $y => &$row){
+ foreach($row as $x => &$val){
+ if($mask($x, $y) === 0 && ($val & $this::M_DATA) === $this::M_DATA){
+ $val ^= $this::IS_DARK;
+ }
+ }
+ }
+
+ return $this;
+ }
+
+}
diff --git a/src/Decoder/Binarizer.php b/src/Decoder/Binarizer.php
new file mode 100644
index 000000000..c83322dfe
--- /dev/null
+++ b/src/Decoder/Binarizer.php
@@ -0,0 +1,367 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Decoder;
+
+use RuntimeException;
+use function array_fill, count, max;
+
+/**
+ * This class implements a local thresholding algorithm, which while slower than the
+ * GlobalHistogramBinarizer, is fairly efficient for what it does. It is designed for
+ * high frequency images of barcodes with black data on white backgrounds. For this application,
+ * it does a much better job than a global blackpoint with severe shadows and gradients.
+ * However it tends to produce artifacts on lower frequency images and is therefore not
+ * a good general purpose binarizer for uses outside ZXing.
+ *
+ * This class extends GlobalHistogramBinarizer, using the older histogram approach for 1D readers,
+ * and the newer local approach for 2D readers. 1D decoding using a per-row histogram is already
+ * inherently local, and only fails for horizontal gradients. We can revisit that problem later,
+ * but for now it was not a win to use local blocks for 1D.
+ *
+ * This Binarizer is the default for the unit tests and the recommended class for library users.
+ *
+ * @author dswitkin@google.com (Daniel Switkin)
+ */
+final class Binarizer{
+
+ // This class uses 5x5 blocks to compute local luminance, where each block is 8x8 pixels.
+ // So this is the smallest dimension in each axis we can accept.
+ private const BLOCK_SIZE_POWER = 3;
+ private const BLOCK_SIZE = 8; // ...0100...00
+ private const BLOCK_SIZE_MASK = 7; // ...0011...11
+ private const MINIMUM_DIMENSION = 40;
+ private const MIN_DYNAMIC_RANGE = 24;
+
+# private const LUMINANCE_BITS = 5;
+ private const LUMINANCE_SHIFT = 3;
+ private const LUMINANCE_BUCKETS = 32;
+
+ private LuminanceSource $source;
+
+ /**
+ *
+ */
+ public function __construct(LuminanceSource $source){
+ $this->source = $source;
+ }
+
+ /**
+ * @throws \RuntimeException
+ */
+ private function estimateBlackPoint(array $buckets):int{
+ // Find the tallest peak in the histogram.
+ $numBuckets = count($buckets);
+ $maxBucketCount = 0;
+ $firstPeak = 0;
+ $firstPeakSize = 0;
+
+ for($x = 0; $x < $numBuckets; $x++){
+
+ if($buckets[$x] > $firstPeakSize){
+ $firstPeak = $x;
+ $firstPeakSize = $buckets[$x];
+ }
+
+ if($buckets[$x] > $maxBucketCount){
+ $maxBucketCount = $buckets[$x];
+ }
+ }
+
+ // Find the second-tallest peak which is somewhat far from the tallest peak.
+ $secondPeak = 0;
+ $secondPeakScore = 0;
+
+ for($x = 0; $x < $numBuckets; $x++){
+ $distanceToBiggest = $x - $firstPeak;
+ // Encourage more distant second peaks by multiplying by square of distance.
+ $score = $buckets[$x] * $distanceToBiggest * $distanceToBiggest;
+
+ if($score > $secondPeakScore){
+ $secondPeak = $x;
+ $secondPeakScore = $score;
+ }
+ }
+
+ // Make sure firstPeak corresponds to the black peak.
+ if($firstPeak > $secondPeak){
+ $temp = $firstPeak;
+ $firstPeak = $secondPeak;
+ $secondPeak = $temp;
+ }
+
+ // If there is too little contrast in the image to pick a meaningful black point, throw rather
+ // than waste time trying to decode the image, and risk false positives.
+ if($secondPeak - $firstPeak <= $numBuckets / 16){
+ throw new RuntimeException('no meaningful dark point found');
+ }
+
+ // Find a valley between them that is low and closer to the white peak.
+ $bestValley = $secondPeak - 1;
+ $bestValleyScore = -1;
+
+ for($x = $secondPeak - 1; $x > $firstPeak; $x--){
+ $fromFirst = $x - $firstPeak;
+ $score = $fromFirst * $fromFirst * ($secondPeak - $x) * ($maxBucketCount - $buckets[$x]);
+
+ if($score > $bestValleyScore){
+ $bestValley = $x;
+ $bestValleyScore = $score;
+ }
+ }
+
+ return $bestValley << self::LUMINANCE_SHIFT;
+ }
+
+ /**
+ * Calculates the final BitMatrix once for all requests. This could be called once from the
+ * constructor instead, but there are some advantages to doing it lazily, such as making
+ * profiling easier, and not doing heavy lifting when callers don't expect it.
+ *
+ * Converts a 2D array of luminance data to 1 bit data. As above, assume this method is expensive
+ * and do not call it repeatedly. This method is intended for decoding 2D barcodes and may or
+ * may not apply sharpening. Therefore, a row from this matrix may not be identical to one
+ * fetched using getBlackRow(), so don't mix and match between them.
+ *
+ * @return \chillerlan\QRCode\Decoder\BitMatrix The 2D array of bits for the image (true means black).
+ */
+ public function getBlackMatrix():BitMatrix{
+ $width = $this->source->getWidth();
+ $height = $this->source->getHeight();
+
+ if($width >= self::MINIMUM_DIMENSION && $height >= self::MINIMUM_DIMENSION){
+ $subWidth = $width >> self::BLOCK_SIZE_POWER;
+
+ if(($width & self::BLOCK_SIZE_MASK) !== 0){
+ $subWidth++;
+ }
+
+ $subHeight = $height >> self::BLOCK_SIZE_POWER;
+
+ if(($height & self::BLOCK_SIZE_MASK) !== 0){
+ $subHeight++;
+ }
+
+ return $this->calculateThresholdForBlock($subWidth, $subHeight, $width, $height);
+ }
+
+ // If the image is too small, fall back to the global histogram approach.
+ return $this->getHistogramBlackMatrix($width, $height);
+ }
+
+ /**
+ *
+ */
+ public function getHistogramBlackMatrix(int $width, int $height):BitMatrix{
+ $matrix = new BitMatrix(max($width, $height));
+
+ // Quickly calculates the histogram by sampling four rows from the image. This proved to be
+ // more robust on the blackbox tests than sampling a diagonal as we used to do.
+ $buckets = array_fill(0, self::LUMINANCE_BUCKETS, 0);
+
+ for($y = 1; $y < 5; $y++){
+ $row = (int)($height * $y / 5);
+ $localLuminances = $this->source->getRow($row);
+ $right = (int)(($width * 4) / 5);
+
+ for($x = (int)($width / 5); $x < $right; $x++){
+ $pixel = $localLuminances[(int)$x] & 0xff;
+ $buckets[$pixel >> self::LUMINANCE_SHIFT]++;
+ }
+ }
+
+ $blackPoint = $this->estimateBlackPoint($buckets);
+
+ // We delay reading the entire image luminance until the black point estimation succeeds.
+ // Although we end up reading four rows twice, it is consistent with our motto of
+ // "fail quickly" which is necessary for continuous scanning.
+ $localLuminances = $this->source->getMatrix();
+
+ for($y = 0; $y < $height; $y++){
+ $offset = $y * $width;
+
+ for($x = 0; $x < $width; $x++){
+ $pixel = (int)($localLuminances[$offset + $x] & 0xff);
+
+ if($pixel < $blackPoint){
+ $matrix->set($x, $y);
+ }
+ }
+ }
+
+ return $matrix;
+ }
+
+ /**
+ * Calculates a single black point for each block of pixels and saves it away.
+ * See the following thread for a discussion of this algorithm:
+ *
+ * @see http://groups.google.com/group/zxing/browse_thread/thread/d06efa2c35a7ddc0
+ */
+ private function calculateBlackPoints(array $luminances, int $subWidth, int $subHeight, int $width, int $height):array{
+ $blackPoints = array_fill(0, $subHeight, 0);
+
+ foreach($blackPoints as $key => $point){
+ $blackPoints[$key] = array_fill(0, $subWidth, 0);
+ }
+
+ for($y = 0; $y < $subHeight; $y++){
+ $yoffset = ($y << self::BLOCK_SIZE_POWER);
+ $maxYOffset = $height - self::BLOCK_SIZE;
+
+ if($yoffset > $maxYOffset){
+ $yoffset = $maxYOffset;
+ }
+
+ for($x = 0; $x < $subWidth; $x++){
+ $xoffset = ($x << self::BLOCK_SIZE_POWER);
+ $maxXOffset = $width - self::BLOCK_SIZE;
+
+ if($xoffset > $maxXOffset){
+ $xoffset = $maxXOffset;
+ }
+
+ $sum = 0;
+ $min = 255;
+ $max = 0;
+
+ for($yy = 0, $offset = $yoffset * $width + $xoffset; $yy < self::BLOCK_SIZE; $yy++, $offset += $width){
+
+ for($xx = 0; $xx < self::BLOCK_SIZE; $xx++){
+ $pixel = (int)($luminances[(int)($offset + $xx)]) & 0xff;
+ $sum += $pixel;
+ // still looking for good contrast
+ if($pixel < $min){
+ $min = $pixel;
+ }
+
+ if($pixel > $max){
+ $max = $pixel;
+ }
+ }
+
+ // short-circuit min/max tests once dynamic range is met
+ if($max - $min > self::MIN_DYNAMIC_RANGE){
+ // finish the rest of the rows quickly
+ for($yy++, $offset += $width; $yy < self::BLOCK_SIZE; $yy++, $offset += $width){
+ for($xx = 0; $xx < self::BLOCK_SIZE; $xx++){
+ $sum += $luminances[$offset + $xx] & 0xff;
+ }
+ }
+ }
+ }
+
+ // The default estimate is the average of the values in the block.
+ $average = $sum >> (self::BLOCK_SIZE_POWER * 2);
+
+ if($max - $min <= self::MIN_DYNAMIC_RANGE){
+ // If variation within the block is low, assume this is a block with only light or only
+ // dark pixels. In that case we do not want to use the average, as it would divide this
+ // low contrast area into black and white pixels, essentially creating data out of noise.
+ //
+ // The default assumption is that the block is light/background. Since no estimate for
+ // the level of dark pixels exists locally, use half the min for the block.
+ $average = (int)($min / 2);
+
+ if($y > 0 && $x > 0){
+ // Correct the "white background" assumption for blocks that have neighbors by comparing
+ // the pixels in this block to the previously calculated black points. This is based on
+ // the fact that dark barcode symbology is always surrounded by some amount of light
+ // background for which reasonable black point estimates were made. The bp estimated at
+ // the boundaries is used for the interior.
+
+ // The (min < bp) is arbitrary but works better than other heuristics that were tried.
+ $averageNeighborBlackPoint = (int)(($blackPoints[$y - 1][$x] + (2 * $blackPoints[$y][$x - 1]) + $blackPoints[$y - 1][$x - 1]) / 4);
+
+ if($min < $averageNeighborBlackPoint){
+ $average = $averageNeighborBlackPoint;
+ }
+ }
+ }
+
+ $blackPoints[$y][$x] = (int)($average);
+ }
+ }
+
+ return $blackPoints;
+ }
+
+ /**
+ * For each block in the image, calculate the average black point using a 5x5 grid
+ * of the blocks around it. Also handles the corner cases (fractional blocks are computed based
+ * on the last pixels in the row/column which are also used in the previous block).
+ */
+ private function calculateThresholdForBlock(
+ int $subWidth,
+ int $subHeight,
+ int $width,
+ int $height
+ ):BitMatrix{
+ $matrix = new BitMatrix(max($width, $height));
+ $luminances = $this->source->getMatrix();
+ $blackPoints = $this->calculateBlackPoints($luminances, $subWidth, $subHeight, $width, $height);
+
+ for($y = 0; $y < $subHeight; $y++){
+ $yoffset = ($y << self::BLOCK_SIZE_POWER);
+ $maxYOffset = $height - self::BLOCK_SIZE;
+
+ if($yoffset > $maxYOffset){
+ $yoffset = $maxYOffset;
+ }
+
+ for($x = 0; $x < $subWidth; $x++){
+ $xoffset = ($x << self::BLOCK_SIZE_POWER);
+ $maxXOffset = $width - self::BLOCK_SIZE;
+
+ if($xoffset > $maxXOffset){
+ $xoffset = $maxXOffset;
+ }
+
+ $left = $this->cap($x, 2, $subWidth - 3);
+ $top = $this->cap($y, 2, $subHeight - 3);
+ $sum = 0;
+
+ for($z = -2; $z <= 2; $z++){
+ $blackRow = $blackPoints[$top + $z];
+ $sum += $blackRow[$left - 2] + $blackRow[$left - 1] + $blackRow[$left] + $blackRow[$left + 1] + $blackRow[$left + 2];
+ }
+
+ $average = (int)($sum / 25);
+
+ // Applies a single threshold to a block of pixels.
+ for($j = 0, $o = $yoffset * $width + $xoffset; $j < self::BLOCK_SIZE; $j++, $o += $width){
+ for($i = 0; $i < self::BLOCK_SIZE; $i++){
+ // Comparison needs to be <= so that black == 0 pixels are black even if the threshold is 0.
+ if(($luminances[$o + $i] & 0xff) <= $average){
+ $matrix->set($xoffset + $i, $yoffset + $j);
+ }
+ }
+ }
+ }
+ }
+
+ return $matrix;
+ }
+
+ private function cap(int $value, int $min, int $max):int{
+
+ if($value < $min){
+ return $min;
+ }
+
+ if($value > $max){
+ return $max;
+ }
+
+ return $value;
+ }
+
+}
diff --git a/src/Decoder/BitMatrix.php b/src/Decoder/BitMatrix.php
new file mode 100644
index 000000000..4863d8e1f
--- /dev/null
+++ b/src/Decoder/BitMatrix.php
@@ -0,0 +1,209 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Decoder;
+
+use chillerlan\QRCode\Common\{MaskPattern, Version};
+use InvalidArgumentException;
+use function array_fill, count;
+
+/**
+ *
+ */
+final class BitMatrix{
+
+ private int $dimension;
+ private int $rowSize;
+ private array $bits;
+
+ /**
+ *
+ */
+ public function __construct(int $dimension){
+ $this->dimension = $dimension;
+ $this->rowSize = ((int)(($this->dimension + 0x1f) / 0x20));
+ $this->bits = array_fill(0, $this->rowSize * $this->dimension, 0);
+ }
+
+ /**
+ * Sets the given bit to true.
+ *
+ * @param int $x ; The horizontal component (i.e. which column)
+ * @param int $y ; The vertical component (i.e. which row)
+ */
+ public function set(int $x, int $y):void{
+ $offset = (int)($y * $this->rowSize + ($x / 0x20));
+
+ $this->bits[$offset] ??= 0;
+ $this->bits[$offset] |= ($this->bits[$offset] |= 1 << ($x & 0x1f));
+ }
+
+ /**
+ * Flips the given bit. 1 << (0xf9 & 0x1f)
+ *
+ * @param int $x ; The horizontal component (i.e. which column)
+ * @param int $y ; The vertical component (i.e. which row)
+ */
+ public function flip(int $x, int $y):void{
+ $offset = $y * $this->rowSize + (int)($x / 0x20);
+
+ $this->bits[$offset] = ($this->bits[$offset] ^ (1 << ($x & 0x1f)));
+ }
+
+ /**
+ * Sets a square region of the bit matrix to true.
+ *
+ * @param int $left ; The horizontal position to begin at (inclusive)
+ * @param int $top ; The vertical position to begin at (inclusive)
+ * @param int $width ; The width of the region
+ * @param int $height ; The height of the region
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setRegion(int $left, int $top, int $width, int $height):void{
+
+ if($top < 0 || $left < 0){
+ throw new InvalidArgumentException('Left and top must be nonnegative');
+ }
+
+ if($height < 1 || $width < 1){
+ throw new InvalidArgumentException('Height and width must be at least 1');
+ }
+
+ $right = $left + $width;
+ $bottom = $top + $height;
+
+ if($bottom > $this->dimension || $right > $this->dimension){
+ throw new InvalidArgumentException('The region must fit inside the matrix');
+ }
+
+ for($y = $top; $y < $bottom; $y++){
+ $yOffset = $y * $this->rowSize;
+
+ for($x = $left; $x < $right; $x++){
+ $xOffset = $yOffset + (int)($x / 0x20);
+ $this->bits[$xOffset] = ($this->bits[$xOffset] |= 1 << ($x & 0x1f));
+ }
+ }
+ }
+
+ /**
+ * @return int The dimension (width/height) of the matrix
+ */
+ public function getDimension():int{
+ return $this->dimension;
+ }
+
+ /**
+ * Gets the requested bit, where true means black.
+ *
+ * @param int $x The horizontal component (i.e. which column)
+ * @param int $y The vertical component (i.e. which row)
+ *
+ * @return bool value of given bit in matrix
+ */
+ public function get(int $x, int $y):bool{
+ $offset = (int)($y * $this->rowSize + ($x / 0x20));
+
+ $this->bits[$offset] ??= 0;
+
+ return (BitMatrixParser::uRShift($this->bits[$offset], ($x & 0x1f)) & 1) !== 0;
+ }
+
+ /**
+ * See ISO 18004:2006 Annex E
+ */
+ public function buildFunctionPattern(Version $version):BitMatrix{
+ $dimension = $version->getDimension();
+ // @todo
+ $bitMatrix = new self($dimension);
+
+ // Top left finder pattern + separator + format
+ $bitMatrix->setRegion(0, 0, 9, 9);
+ // Top right finder pattern + separator + format
+ $bitMatrix->setRegion($dimension - 8, 0, 8, 9);
+ // Bottom left finder pattern + separator + format
+ $bitMatrix->setRegion(0, $dimension - 8, 9, 8);
+
+ // Alignment patterns
+ $apc = $version->getAlignmentPattern();
+ $max = count($apc);
+
+ for($x = 0; $x < $max; $x++){
+ $i = $apc[$x] - 2;
+
+ for($y = 0; $y < $max; $y++){
+ if(($x === 0 && ($y === 0 || $y === $max - 1)) || ($x === $max - 1 && $y === 0)){
+ // No alignment patterns near the three finder paterns
+ continue;
+ }
+
+ $bitMatrix->setRegion($apc[$y] - 2, $i, 5, 5);
+ }
+ }
+
+ // Vertical timing pattern
+ $bitMatrix->setRegion(6, 9, 1, $dimension - 17);
+ // Horizontal timing pattern
+ $bitMatrix->setRegion(9, 6, $dimension - 17, 1);
+
+ if($version->getVersionNumber() > 6){
+ // Version info, top right
+ $bitMatrix->setRegion($dimension - 11, 0, 3, 6);
+ // Version info, bottom left
+ $bitMatrix->setRegion(0, $dimension - 11, 6, 3);
+ }
+
+ return $bitMatrix;
+ }
+
+ /**
+ * Mirror the bit matrix in order to attempt a second reading.
+ */
+ public function mirror():void{
+
+ for($x = 0; $x < $this->dimension; $x++){
+ for($y = $x + 1; $y < $this->dimension; $y++){
+ if($this->get($x, $y) !== $this->get($y, $x)){
+ $this->flip($y, $x);
+ $this->flip($x, $y);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Encapsulates data masks for the data bits in a QR code, per ISO 18004:2006 6.8. Implementations
+ * of this class can un-mask a raw BitMatrix. For simplicity, they will unmask the entire BitMatrix,
+ * including areas used for finder patterns, timing patterns, etc. These areas should be unused
+ * after the point they are unmasked anyway.
+ *
+ * Note that the diagram in section 6.8.1 is misleading since it indicates that i is column position
+ * and j is row position. In fact, as the text says, i is row position and j is column position.
+ *
+ * Implementations of this method reverse the data masking process applied to a QR Code and
+ * make its bits ready to read.
+ */
+ public function unmask(int $dimension, MaskPattern $maskPattern):void{
+ $mask = $maskPattern->getMask();
+
+ for($y = 0; $y < $dimension; $y++){
+ for($x = 0; $x < $dimension; $x++){
+ if($mask($x, $y) === 0){
+ $this->flip($x, $y);
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/src/Decoder/BitMatrixParser.php b/src/Decoder/BitMatrixParser.php
new file mode 100644
index 000000000..24ae15f94
--- /dev/null
+++ b/src/Decoder/BitMatrixParser.php
@@ -0,0 +1,371 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Decoder;
+
+use RuntimeException;
+use chillerlan\QRCode\Common\{Version, FormatInformation};
+use const PHP_INT_MAX, PHP_INT_SIZE;
+
+/**
+ * @author Sean Owen
+ */
+final class BitMatrixParser{
+
+ private BitMatrix $bitMatrix;
+ private ?Version $parsedVersion = null;
+ private ?FormatInformation $parsedFormatInfo = null;
+ private bool $mirror = false;
+
+ /**
+ * @param \chillerlan\QRCode\Decoder\BitMatrix $bitMatrix
+ *
+ * @throws \RuntimeException if dimension is not >= 21 and 1 mod 4
+ */
+ public function __construct(BitMatrix $bitMatrix){
+ $dimension = $bitMatrix->getDimension();
+
+ if($dimension < 21 || ($dimension % 4) !== 1){
+ throw new RuntimeException('dimension is not >= 21, dimension mod 4 not 1');
+ }
+
+ $this->bitMatrix = $bitMatrix;
+ }
+
+ /**
+ * Prepare the parser for a mirrored operation.
+ * This flag has effect only on the {@link #readFormatInformation()} and the
+ * {@link #readVersion()}. Before proceeding with {@link #readCodewords()} the
+ * {@link #mirror()} method should be called.
+ *
+ * @param bool $mirror Whether to read version and format information mirrored.
+ */
+ public function setMirror(bool $mirror):void{
+ $this->parsedVersion = null;
+ $this->parsedFormatInfo = null;
+ $this->mirror = $mirror;
+ }
+
+ /**
+ * Mirror the bit matrix in order to attempt a second reading.
+ */
+ public function mirror():void{
+ $this->bitMatrix->mirror();
+ }
+
+ /**
+ *
+ */
+ private function copyBit(int $i, int $j, int $versionBits):int{
+
+ $bit = $this->mirror
+ ? $this->bitMatrix->get($j, $i)
+ : $this->bitMatrix->get($i, $j);
+
+ return $bit ? ($versionBits << 1) | 0x1 : $versionBits << 1;
+ }
+
+ /**
+ * Reads the bits in the {@link BitMatrix} representing the finder pattern in the
+ * correct order in order to reconstruct the codewords bytes contained within the
+ * QR Code.
+ *
+ * @return array bytes encoded within the QR Code
+ * @throws \RuntimeException if the exact number of bytes expected is not read
+ */
+ public function readCodewords():array{
+ $formatInfo = $this->readFormatInformation();
+ $version = $this->readVersion();
+
+ // Get the data mask for the format used in this QR Code. This will exclude
+ // some bits from reading as we wind through the bit matrix.
+ $dimension = $this->bitMatrix->getDimension();
+ $this->bitMatrix->unmask($dimension, $formatInfo->getDataMask());
+ $functionPattern = $this->bitMatrix->buildFunctionPattern($version);
+
+ $readingUp = true;
+ $result = [];
+ $resultOffset = 0;
+ $currentByte = 0;
+ $bitsRead = 0;
+ // Read columns in pairs, from right to left
+ for($j = $dimension - 1; $j > 0; $j -= 2){
+
+ if($j === 6){
+ // Skip whole column with vertical alignment pattern;
+ // saves time and makes the other code proceed more cleanly
+ $j--;
+ }
+ // Read alternatingly from bottom to top then top to bottom
+ for($count = 0; $count < $dimension; $count++){
+ $i = $readingUp ? $dimension - 1 - $count : $count;
+
+ for($col = 0; $col < 2; $col++){
+ // Ignore bits covered by the function pattern
+ if(!$functionPattern->get($j - $col, $i)){
+ // Read a bit
+ $bitsRead++;
+ $currentByte <<= 1;
+
+ if($this->bitMatrix->get($j - $col, $i)){
+ $currentByte |= 1;
+ }
+ // If we've made a whole byte, save it off
+ if($bitsRead === 8){
+ $result[$resultOffset++] = $currentByte; //(byte)
+ $bitsRead = 0;
+ $currentByte = 0;
+ }
+ }
+ }
+ }
+
+ $readingUp = !$readingUp; // switch directions
+ }
+
+ if($resultOffset !== $version->getTotalCodewords()){
+ throw new RuntimeException('offset differs from total codewords for version');
+ }
+
+ return $result;
+ }
+
+ /**
+ * Reads format information from one of its two locations within the QR Code.
+ *
+ * @return \chillerlan\QRCode\Common\FormatInformation encapsulating the QR Code's format info
+ * @throws \RuntimeException if both format information locations cannot be parsed as
+ * the valid encoding of format information
+ */
+ public function readFormatInformation():FormatInformation{
+
+ if($this->parsedFormatInfo !== null){
+ return $this->parsedFormatInfo;
+ }
+
+ // Read top-left format info bits
+ $formatInfoBits1 = 0;
+
+ for($i = 0; $i < 6; $i++){
+ $formatInfoBits1 = $this->copyBit($i, 8, $formatInfoBits1);
+ }
+
+ // .. and skip a bit in the timing pattern ...
+ $formatInfoBits1 = $this->copyBit(7, 8, $formatInfoBits1);
+ $formatInfoBits1 = $this->copyBit(8, 8, $formatInfoBits1);
+ $formatInfoBits1 = $this->copyBit(8, 7, $formatInfoBits1);
+ // .. and skip a bit in the timing pattern ...
+ for($j = 5; $j >= 0; $j--){
+ $formatInfoBits1 = $this->copyBit(8, $j, $formatInfoBits1);
+ }
+
+ // Read the top-right/bottom-left pattern too
+ $dimension = $this->bitMatrix->getDimension();
+ $formatInfoBits2 = 0;
+ $jMin = $dimension - 7;
+
+ for($j = $dimension - 1; $j >= $jMin; $j--){
+ $formatInfoBits2 = $this->copyBit(8, $j, $formatInfoBits2);
+ }
+
+ for($i = $dimension - 8; $i < $dimension; $i++){
+ $formatInfoBits2 = $this->copyBit($i, 8, $formatInfoBits2);
+ }
+
+ $this->parsedFormatInfo = $this->doDecodeFormatInformation($formatInfoBits1, $formatInfoBits2);
+
+ if($this->parsedFormatInfo !== null){
+ return $this->parsedFormatInfo;
+ }
+
+ // Should return null, but, some QR codes apparently do not mask this info.
+ // Try again by actually masking the pattern first.
+ $this->parsedFormatInfo = $this->doDecodeFormatInformation(
+ $formatInfoBits1 ^ FormatInformation::MASK_QR,
+ $formatInfoBits2 ^ FormatInformation::MASK_QR
+ );
+
+ if($this->parsedFormatInfo !== null){
+ return $this->parsedFormatInfo;
+ }
+
+ throw new RuntimeException('failed to read format info');
+ }
+
+ /**
+ * @param int $maskedFormatInfo1 format info indicator, with mask still applied
+ * @param int $maskedFormatInfo2 second copy of same info; both are checked at the same time
+ * to establish best match
+ *
+ * @return \chillerlan\QRCode\Common\FormatInformation|null information about the format it specifies, or null
+ * if doesn't seem to match any known pattern
+ */
+ private function doDecodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2):?FormatInformation{
+ // Find the int in FORMAT_INFO_DECODE_LOOKUP with fewest bits differing
+ $bestDifference = PHP_INT_MAX;
+ $bestFormatInfo = 0;
+
+ foreach(FormatInformation::DECODE_LOOKUP as $decodeInfo){
+ [$maskedBits, $dataBits] = $decodeInfo;
+
+ if($maskedFormatInfo1 === $dataBits || $maskedFormatInfo2 === $dataBits){
+ // Found an exact match
+ return new FormatInformation($maskedBits);
+ }
+
+ $bitsDifference = self::numBitsDiffering($maskedFormatInfo1, $dataBits);
+
+ if($bitsDifference < $bestDifference){
+ $bestFormatInfo = $maskedBits;
+ $bestDifference = $bitsDifference;
+ }
+
+ if($maskedFormatInfo1 !== $maskedFormatInfo2){
+ // also try the other option
+ $bitsDifference = self::numBitsDiffering($maskedFormatInfo2, $dataBits);
+
+ if($bitsDifference < $bestDifference){
+ $bestFormatInfo = $maskedBits;
+ $bestDifference = $bitsDifference;
+ }
+ }
+ }
+ // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match
+ if($bestDifference <= 3){
+ return new FormatInformation($bestFormatInfo);
+ }
+
+ return null;
+ }
+
+ /**
+ * Reads version information from one of its two locations within the QR Code.
+ *
+ * @return \chillerlan\QRCode\Common\Version encapsulating the QR Code's version
+ * @throws \RuntimeException if both version information locations cannot be parsed as
+ * the valid encoding of version information
+ */
+ public function readVersion():Version{
+
+ if($this->parsedVersion !== null){
+ return $this->parsedVersion;
+ }
+
+ $dimension = $this->bitMatrix->getDimension();
+ $provisionalVersion = ($dimension - 17) / 4;
+
+ if($provisionalVersion <= 6){
+ return new Version($provisionalVersion);
+ }
+
+ // Read top-right version info: 3 wide by 6 tall
+ $versionBits = 0;
+ $ijMin = $dimension - 11;
+
+ for($j = 5; $j >= 0; $j--){
+ for($i = $dimension - 9; $i >= $ijMin; $i--){
+ $versionBits = $this->copyBit($i, $j, $versionBits);
+ }
+ }
+
+ $this->parsedVersion = $this->decodeVersionInformation($versionBits);
+
+ if($this->parsedVersion !== null && $this->parsedVersion->getDimension() === $dimension){
+ return $this->parsedVersion;
+ }
+
+ // Hmm, failed. Try bottom left: 6 wide by 3 tall
+ $versionBits = 0;
+
+ for($i = 5; $i >= 0; $i--){
+ for($j = $dimension - 9; $j >= $ijMin; $j--){
+ $versionBits = $this->copyBit($i, $j, $versionBits);
+ }
+ }
+
+ $this->parsedVersion = $this->decodeVersionInformation($versionBits);
+
+ if($this->parsedVersion !== null && $this->parsedVersion->getDimension() === $dimension){
+ return $this->parsedVersion;
+ }
+
+ throw new RuntimeException('failed to read version');
+ }
+
+ /**
+ * @param int $versionBits
+ *
+ * @return \chillerlan\QRCode\Common\Version|null
+ */
+ private function decodeVersionInformation(int $versionBits):?Version{
+ $bestDifference = PHP_INT_MAX;
+ $bestVersion = 0;
+
+ for($i = 7; $i <= 40; $i++){
+ $targetVersion = new Version($i);
+ $targetVersionPattern = $targetVersion->getVersionPattern();
+
+ // Do the version info bits match exactly? done.
+ if($targetVersionPattern === $versionBits){
+ return $targetVersion;
+ }
+
+ // Otherwise see if this is the closest to a real version info bit string
+ // we have seen so far
+ /** @phan-suppress-next-line PhanTypeMismatchArgumentNullable ($targetVersionPattern is never null here) */
+ $bitsDifference = self::numBitsDiffering($versionBits, $targetVersionPattern);
+
+ if($bitsDifference < $bestDifference){
+ $bestVersion = $i;
+ $bestDifference = $bitsDifference;
+ }
+ }
+ // We can tolerate up to 3 bits of error since no two version info codewords will
+ // differ in less than 8 bits.
+ if($bestDifference <= 3){
+ return new Version($bestVersion);
+ }
+
+ // If we didn't find a close enough match, fail
+ return null;
+ }
+
+ /**
+ *
+ */
+ public static function uRShift(int $a, int $b):int{
+
+ if($b === 0){
+ return $a;
+ }
+
+ return ($a >> $b) & ~((1 << (8 * PHP_INT_SIZE - 1)) >> ($b - 1));
+ }
+
+ /**
+ *
+ */
+ private static function numBitsDiffering(int $a, int $b):int{
+ // a now has a 1 bit exactly where its bit differs with b's
+ $a ^= $b;
+ // Offset i holds the number of 1 bits in the binary representation of i
+ $BITS_SET_IN_HALF_BYTE = [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4];
+ // Count bits set quickly with a series of lookups:
+ $count = 0;
+
+ for($i = 0; $i < 32; $i += 4){
+ $count += $BITS_SET_IN_HALF_BYTE[self::uRShift($a, $i) & 0x0F];
+ }
+
+ return $count;
+ }
+
+}
diff --git a/src/Decoder/Decoder.php b/src/Decoder/Decoder.php
new file mode 100644
index 000000000..1a31e724b
--- /dev/null
+++ b/src/Decoder/Decoder.php
@@ -0,0 +1,337 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Decoder;
+
+use Exception, InvalidArgumentException, RuntimeException;
+use chillerlan\QRCode\Common\{BitBuffer, EccLevel, Mode, ReedSolomonDecoder, Version};
+use chillerlan\QRCode\Data\{AlphaNum, Byte, ECI, Kanji, Number};
+use chillerlan\QRCode\Detector\Detector;
+use function count, array_fill, mb_convert_encoding, mb_detect_encoding;
+
+/**
+ * The main class which implements QR Code decoding -- as opposed to locating and extracting
+ * the QR Code from an image.
+ *
+ * @author Sean Owen
+ */
+final class Decoder{
+
+# private const GB2312_SUBSET = 1;
+
+ /**
+ * Decodes a QR Code represented as a {@link \chillerlan\QRCode\Decoder\BitMatrix}.
+ * A 1 or "true" is taken to mean a black module.
+ *
+ * @param \chillerlan\QRCode\Decoder\LuminanceSource $source
+ *
+ * @return \chillerlan\QRCode\Decoder\DecoderResult text and bytes encoded within the QR Code
+ * @throws \Exception if the QR Code cannot be decoded
+ */
+ public function decode(LuminanceSource $source):DecoderResult{
+ $matrix = (new Binarizer($source))->getBlackMatrix();
+ $bitMatrix = (new Detector($matrix))->detect();
+
+ $fe = null;
+
+ try{
+ // Construct a parser and read version, error-correction level
+ // clone the BitMatrix to avoid errors in case we run into mirroring
+ return $this->decodeParser(new BitMatrixParser(clone $bitMatrix));
+ }
+ catch(Exception $e){
+ $fe = $e;
+ }
+
+ try{
+ $parser = new BitMatrixParser(clone $bitMatrix);
+
+ // Will be attempting a mirrored reading of the version and format info.
+ $parser->setMirror(true);
+
+ // Preemptively read the version.
+# $parser->readVersion();
+
+ // Preemptively read the format information.
+# $parser->readFormatInformation();
+
+ /*
+ * Since we're here, this means we have successfully detected some kind
+ * of version and format information when mirrored. This is a good sign,
+ * that the QR code may be mirrored, and we should try once more with a
+ * mirrored content.
+ */
+ // Prepare for a mirrored reading.
+ $parser->mirror();
+
+ return $this->decodeParser($parser);
+ }
+ catch(Exception $e){
+ // Throw the exception from the original reading
+ if($fe instanceof Exception){
+ throw $fe;
+ }
+
+ throw $e;
+ }
+
+ }
+
+ /**
+ * @param \chillerlan\QRCode\Decoder\BitMatrixParser $parser
+ *
+ * @return \chillerlan\QRCode\Decoder\DecoderResult
+ */
+ private function decodeParser(BitMatrixParser $parser):DecoderResult{
+ $version = $parser->readVersion();
+ $eccLevel = $parser->readFormatInformation()->getErrorCorrectionLevel();
+
+ // Read raw codewords
+ $rawCodewords = $parser->readCodewords();
+ // Separate into data blocks
+ $dataBlocks = $this->getDataBlocks($rawCodewords, $version, $eccLevel);
+
+ $resultBytes = [];
+ $resultOffset = 0;
+
+ // Error-correct and copy data blocks together into a stream of bytes
+ foreach($dataBlocks as $dataBlock){
+ [$numDataCodewords, $codewordBytes] = $dataBlock;
+
+ $corrected = $this->correctErrors($codewordBytes, $numDataCodewords);
+
+ for($i = 0; $i < $numDataCodewords; $i++){
+ $resultBytes[$resultOffset++] = $corrected[$i];
+ }
+ }
+
+ // Decode the contents of that stream of bytes
+ return $this->decodeBitStream($resultBytes, $version, $eccLevel);
+ }
+
+ /**
+ * When QR Codes use multiple data blocks, they are actually interleaved.
+ * That is, the first byte of data block 1 to n is written, then the second bytes, and so on. This
+ * method will separate the data into original blocks.
+ *
+ * @param array $rawCodewords bytes as read directly from the QR Code
+ * @param \chillerlan\QRCode\Common\Version $version version of the QR Code
+ * @param \chillerlan\QRCode\Common\EccLevel $eccLevel error-correction level of the QR Code
+ *
+ * @return array DataBlocks containing original bytes, "de-interleaved" from representation in the QR Code
+ * @throws \InvalidArgumentException
+ */
+ private function getDataBlocks(array $rawCodewords, Version $version, EccLevel $eccLevel):array{
+
+ if(count($rawCodewords) !== $version->getTotalCodewords()){
+ throw new InvalidArgumentException('$rawCodewords differ from total codewords for version');
+ }
+
+ // Figure out the number and size of data blocks used by this version and
+ // error correction level
+ [$numEccCodewords, $eccBlocks] = $version->getRSBlocks($eccLevel);
+
+ // Now establish DataBlocks of the appropriate size and number of data codewords
+ $result = [];//new DataBlock[$totalBlocks];
+ $numResultBlocks = 0;
+
+ foreach($eccBlocks as $blockData){
+ [$numEccBlocks, $eccPerBlock] = $blockData;
+
+ for($i = 0; $i < $numEccBlocks; $i++, $numResultBlocks++){
+ $result[$numResultBlocks] = [$eccPerBlock, array_fill(0, $numEccCodewords + $eccPerBlock, 0)];
+ }
+ }
+
+ // All blocks have the same amount of data, except that the last n
+ // (where n may be 0) have 1 more byte. Figure out where these start.
+ /** @phan-suppress-next-line PhanTypePossiblyInvalidDimOffset */
+ $shorterBlocksTotalCodewords = count($result[0][1]);
+ $longerBlocksStartAt = count($result) - 1;
+
+ while($longerBlocksStartAt >= 0){
+ $numCodewords = count($result[$longerBlocksStartAt][1]);
+
+ if($numCodewords == $shorterBlocksTotalCodewords){
+ break;
+ }
+
+ $longerBlocksStartAt--;
+ }
+
+ $longerBlocksStartAt++;
+
+ $shorterBlocksNumDataCodewords = $shorterBlocksTotalCodewords - $numEccCodewords;
+ // The last elements of result may be 1 element longer;
+ // first fill out as many elements as all of them have
+ $rawCodewordsOffset = 0;
+
+ for($i = 0; $i < $shorterBlocksNumDataCodewords; $i++){
+ for($j = 0; $j < $numResultBlocks; $j++){
+ $result[$j][1][$i] = $rawCodewords[$rawCodewordsOffset++];
+ }
+ }
+
+ // Fill out the last data block in the longer ones
+ for($j = $longerBlocksStartAt; $j < $numResultBlocks; $j++){
+ $result[$j][1][$shorterBlocksNumDataCodewords] = $rawCodewords[$rawCodewordsOffset++];
+ }
+
+ // Now add in error correction blocks
+ /** @phan-suppress-next-line PhanTypePossiblyInvalidDimOffset */
+ $max = count($result[0][1]);
+
+ for($i = $shorterBlocksNumDataCodewords; $i < $max; $i++){
+ for($j = 0; $j < $numResultBlocks; $j++){
+ $iOffset = $j < $longerBlocksStartAt ? $i : $i + 1;
+ $result[$j][1][$iOffset] = $rawCodewords[$rawCodewordsOffset++];
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Given data and error-correction codewords received, possibly corrupted by errors, attempts to
+ * correct the errors in-place using Reed-Solomon error correction.
+ */
+ private function correctErrors(array $codewordBytes, int $numDataCodewords):array{
+ // First read into an array of ints
+ $codewordsInts = [];
+
+ foreach($codewordBytes as $i => $codewordByte){
+ $codewordsInts[$i] = $codewordByte & 0xFF;
+ }
+
+ $decoded = (new ReedSolomonDecoder)->decode($codewordsInts, (count($codewordBytes) - $numDataCodewords));
+
+ // Copy back into array of bytes -- only need to worry about the bytes that were data
+ // We don't care about errors in the error-correction codewords
+ for($i = 0; $i < $numDataCodewords; $i++){
+ $codewordBytes[$i] = $decoded[$i];
+ }
+
+ return $codewordBytes;
+ }
+
+ /**
+ * @throws \RuntimeException
+ */
+ private function decodeBitStream(array $bytes, Version $version, EccLevel $ecLevel):DecoderResult{
+ $bits = new BitBuffer($bytes);
+ $symbolSequence = -1;
+ $parityData = -1;
+ $versionNumber = $version->getVersionNumber();
+
+ $result = '';
+ $eciCharset = null;
+# $fc1InEffect = false;
+
+ // While still another segment to read...
+ while($bits->available() >= 4){
+ $datamode = $bits->read(4); // mode is encoded by 4 bits
+
+ // OK, assume we're done. Really, a TERMINATOR mode should have been recorded here
+ if($datamode === Mode::DATA_TERMINATOR){
+ break;
+ }
+
+ if($datamode === Mode::DATA_ECI){
+ // Count doesn't apply to ECI
+ $eciCharset = ECI::parseValue($bits);
+ }
+ /** @noinspection PhpStatementHasEmptyBodyInspection */
+ elseif($datamode === Mode::DATA_FNC1_FIRST || $datamode === Mode::DATA_FNC1_SECOND){
+ // We do little with FNC1 except alter the parsed result a bit according to the spec
+# $fc1InEffect = true;
+ }
+ elseif($datamode === Mode::DATA_STRCTURED_APPEND){
+ if($bits->available() < 16){
+ throw new RuntimeException('structured append: not enough bits left');
+ }
+ // sequence number and parity is added later to the result metadata
+ // Read next 8 bits (symbol sequence #) and 8 bits (parity data), then continue
+ $symbolSequence = $bits->read(8);
+ $parityData = $bits->read(8);
+ }
+ else{
+ // First handle Hanzi mode which does not start with character count
+/* if($datamode === Mode::DATA_HANZI){
+ //chinese mode contains a sub set indicator right after mode indicator
+ $subset = $bits->read(4);
+ $length = $bits->read(Mode::getLengthBitsForVersion($datamode, $versionNumber));
+ if($subset === self::GB2312_SUBSET){
+ $result .= $this->decodeHanziSegment($bits, $length);
+ }
+ }*/
+# else{
+ // "Normal" QR code modes:
+ if($datamode === Mode::DATA_NUMBER){
+ $result .= Number::decodeSegment($bits, $versionNumber);
+ }
+ elseif($datamode === Mode::DATA_ALPHANUM){
+ $str = AlphaNum::decodeSegment($bits, $versionNumber);
+
+ // See section 6.4.8.1, 6.4.8.2
+/* if($fc1InEffect){
+ $start = \strlen($str);
+ // We need to massage the result a bit if in an FNC1 mode:
+ for($i = $start; $i < $start; $i++){
+ if($str[$i] === '%'){
+ if($i < $start - 1 && $str[$i + 1] === '%'){
+ // %% is rendered as %
+ $str = \substr_replace($str, '', $i + 1, 1);//deleteCharAt(i + 1);
+ }
+# else{
+ // In alpha mode, % should be converted to FNC1 separator 0x1D @todo
+# $str = setCharAt($i, \chr(0x1D)); // ???
+# }
+ }
+ }
+ }
+*/
+ $result .= $str;
+ }
+ elseif($datamode === Mode::DATA_BYTE){
+ $str = Byte::decodeSegment($bits, $versionNumber);
+
+ if($eciCharset !== null){
+ $encoding = $eciCharset->getName();
+
+ if($encoding === null){
+ // The spec isn't clear on this mode; see
+ // section 6.4.5: t does not say which encoding to assuming
+ // upon decoding. I have seen ISO-8859-1 used as well as
+ // Shift_JIS -- without anything like an ECI designator to
+ // give a hint.
+ $encoding = mb_detect_encoding($str, ['ISO-8859-1', 'SJIS', 'UTF-8']);
+ }
+
+ $eciCharset = null;
+ $str = mb_convert_encoding($str, $encoding);
+ }
+
+ $result .= $str;
+ }
+ elseif($datamode === Mode::DATA_KANJI){
+ $result .= Kanji::decodeSegment($bits, $versionNumber);
+ }
+ else{
+ throw new RuntimeException('invalid data mode');
+ }
+# }
+ }
+ }
+
+ return new DecoderResult($bytes, $result, $version, $ecLevel, $symbolSequence, $parityData);
+ }
+
+}
diff --git a/src/Decoder/DecoderResult.php b/src/Decoder/DecoderResult.php
new file mode 100644
index 000000000..e46655838
--- /dev/null
+++ b/src/Decoder/DecoderResult.php
@@ -0,0 +1,107 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Decoder;
+
+use chillerlan\QRCode\Common\{EccLevel, Version};
+
+/**
+ * Encapsulates the result of decoding a matrix of bits. This typically
+ * applies to 2D barcode formats. For now it contains the raw bytes obtained,
+ * as well as a String interpretation of those bytes, if applicable.
+ *
+ * @author Sean Owen
+ */
+final class DecoderResult{
+
+ private array $rawBytes;
+ private string $text;
+ private Version $version;
+ private EccLevel $eccLevel;
+ private int $structuredAppendParity;
+ private int $structuredAppendSequenceNumber;
+
+ /**
+ *
+ */
+ public function __construct(
+ array $rawBytes,
+ string $text,
+ Version $version,
+ EccLevel $eccLevel,
+ int $saSequence = -1,
+ int $saParity = -1
+ ){
+ $this->rawBytes = $rawBytes;
+ $this->text = $text;
+ $this->version = $version;
+ $this->eccLevel = $eccLevel;
+ $this->structuredAppendParity = $saParity;
+ $this->structuredAppendSequenceNumber = $saSequence;
+ }
+
+ /**
+ * @return int[] raw bytes encoded by the barcode, if applicable, otherwise {@code null}
+ */
+ public function getRawBytes():array{
+ return $this->rawBytes;
+ }
+
+ /**
+ * @return string raw text encoded by the barcode
+ */
+ public function getText():string{
+ return $this->text;
+ }
+
+ /**
+ *
+ */
+ public function __toString():string{
+ return $this->text;
+ }
+
+ /**
+ *
+ */
+ public function getVersion():Version{
+ return $this->version;
+ }
+
+ /**
+ *
+ */
+ public function getEccLevel():EccLevel{
+ return $this->eccLevel;
+ }
+
+ /**
+ *
+ */
+ public function hasStructuredAppend():bool{
+ return $this->structuredAppendParity >= 0 && $this->structuredAppendSequenceNumber >= 0;
+ }
+
+ /**
+ *
+ */
+ public function getStructuredAppendParity():int{
+ return $this->structuredAppendParity;
+ }
+
+ /**
+ *
+ */
+ public function getStructuredAppendSequenceNumber():int{
+ return $this->structuredAppendSequenceNumber;
+ }
+
+}
diff --git a/src/Decoder/GDLuminanceSource.php b/src/Decoder/GDLuminanceSource.php
new file mode 100644
index 000000000..ec53da3a2
--- /dev/null
+++ b/src/Decoder/GDLuminanceSource.php
@@ -0,0 +1,69 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCode\Decoder;
+
+use InvalidArgumentException;
+use function get_resource_type, imagecolorat, imagecolorsforindex, imagesx, imagesy, is_resource;
+use const PHP_MAJOR_VERSION;
+
+/**
+ * This class is used to help decode images from files which arrive as GD Resource
+ * It does not support rotation.
+ */
+final class GDLuminanceSource extends LuminanceSource{
+
+ /**
+ * @var resource|\GdImage
+ */
+ private $gdImage;
+
+ /**
+ * GDLuminanceSource constructor.
+ *
+ * @param resource|\GdImage $gdImage
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function __construct($gdImage){
+
+ /** @noinspection PhpFullyQualifiedNameUsageInspection */
+ if(
+ (PHP_MAJOR_VERSION >= 8 && !$gdImage instanceof \GdImage)
+ || (PHP_MAJOR_VERSION < 8 && (!is_resource($gdImage) || get_resource_type($gdImage) !== 'gd'))
+ ){
+ throw new InvalidArgumentException('Invalid GD image source.');
+ }
+
+ parent::__construct(imagesx($gdImage), imagesy($gdImage));
+
+ $this->gdImage = $gdImage;
+
+ $this->setLuminancePixels();
+ }
+
+ /**
+ *
+ */
+ private function setLuminancePixels():void{
+ for($j = 0; $j < $this->height; $j++){
+ for($i = 0; $i < $this->width; $i++){
+ $argb = imagecolorat($this->gdImage, $i, $j);
+ $pixel = imagecolorsforindex($this->gdImage, $argb);
+
+ $this->setLuminancePixel($pixel['red'], $pixel['green'], $pixel['blue']);
+ }
+ }
+ }
+
+}
diff --git a/src/Decoder/IMagickLuminanceSource.php b/src/Decoder/IMagickLuminanceSource.php
new file mode 100644
index 000000000..d0106eeb9
--- /dev/null
+++ b/src/Decoder/IMagickLuminanceSource.php
@@ -0,0 +1,56 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCode\Decoder;
+
+use Imagick;
+use function count;
+
+/**
+ * This class is used to help decode images from files which arrive as Imagick Resource
+ * It does not support rotation.
+ */
+final class IMagickLuminanceSource extends LuminanceSource{
+
+ private Imagick $imagick;
+
+ /**
+ * IMagickLuminanceSource constructor.
+ *
+ * @param \Imagick $imagick
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function __construct(Imagick $imagick){
+ parent::__construct($imagick->getImageWidth(), $imagick->getImageHeight());
+
+ $this->imagick = $imagick;
+
+ $this->setLuminancePixels();
+ }
+
+ /**
+ *
+ */
+ private function setLuminancePixels():void{
+ $this->imagick->setImageColorspace(Imagick::COLORSPACE_GRAY);
+ $pixels = $this->imagick->exportImagePixels(1, 1, $this->width, $this->height, 'RGB', Imagick::PIXEL_CHAR);
+
+ $countPixels = count($pixels);
+
+ for($i = 0; $i < $countPixels; $i += 3){
+ $this->setLuminancePixel($pixels[$i] & 0xff, $pixels[$i + 1] & 0xff, $pixels[$i + 2] & 0xff);
+ }
+ }
+
+}
diff --git a/src/Decoder/LuminanceSource.php b/src/Decoder/LuminanceSource.php
new file mode 100644
index 000000000..8dc8fb513
--- /dev/null
+++ b/src/Decoder/LuminanceSource.php
@@ -0,0 +1,110 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Decoder;
+
+use InvalidArgumentException;
+use function array_slice, array_splice;
+
+/**
+ * The purpose of this class hierarchy is to abstract different bitmap implementations across
+ * platforms into a standard interface for requesting greyscale luminance values. The interface
+ * only provides immutable methods; therefore crop and rotation create copies. This is to ensure
+ * that one Reader does not modify the original luminance source and leave it in an unknown state
+ * for other Readers in the chain.
+ *
+ * @author dswitkin@google.com (Daniel Switkin)
+ */
+abstract class LuminanceSource{
+
+ protected array $luminances;
+ protected int $width;
+ protected int $height;
+
+ /**
+ *
+ */
+ public function __construct(int $width, int $height){
+ $this->width = $width;
+ $this->height = $height;
+ // In order to measure pure decoding speed, we convert the entire image to a greyscale array
+ // up front, which is the same as the Y channel of the YUVLuminanceSource in the real app.
+ $this->luminances = [];
+ // @todo: grayscale?
+ //$this->luminances = $this->grayScaleToBitmap($this->grayscale());
+ }
+
+ /**
+ * Fetches luminance data for the underlying bitmap. Values should be fetched using:
+ * {@code int luminance = array[y * width + x] & 0xff}
+ *
+ * @return array A row-major 2D array of luminance values. Do not use result.length as it may be
+ * larger than width * height bytes on some platforms. Do not modify the contents
+ * of the result.
+ */
+ public function getMatrix():array{
+ return $this->luminances;
+ }
+
+ /**
+ * @return int The width of the bitmap.
+ */
+ public function getWidth():int{
+ return $this->width;
+ }
+
+ /**
+ * @return int The height of the bitmap.
+ */
+ public function getHeight():int{
+ return $this->height;
+ }
+
+ /**
+ * Fetches one row of luminance data from the underlying platform's bitmap. Values range from
+ * 0 (black) to 255 (white). Because Java does not have an unsigned byte type, callers will have
+ * to bitwise and with 0xff for each value. It is preferable for implementations of this method
+ * to only fetch this row rather than the whole image, since no 2D Readers may be installed and
+ * getMatrix() may never be called.
+ *
+ * @param int $y The row to fetch, which must be in [0,getHeight())
+ *
+ * @return array An array containing the luminance data.
+ */
+ public function getRow(int $y):array{
+
+ if($y < 0 || $y >= $this->getHeight()){
+ throw new InvalidArgumentException('Requested row is outside the image: '.$y);
+ }
+
+ $arr = [];
+
+ array_splice($arr, 0, $this->width, array_slice($this->luminances, $y * $this->width, $this->width));
+
+ return $arr;
+ }
+
+ /**
+ * @param int $r
+ * @param int $g
+ * @param int $b
+ *
+ * @return void
+ */
+ protected function setLuminancePixel(int $r, int $g, int $b):void{
+ $this->luminances[] = $r === $g && $g === $b
+ // Image is already greyscale, so pick any channel.
+ ? $r // (($r + 128) % 256) - 128;
+ // Calculate luminance cheaply, favoring green.
+ : ($r + 2 * $g + $b) / 4; // (((($r + 2 * $g + $b) / 4) + 128) % 256) - 128;
+ }
+
+}
diff --git a/src/Detector/AlignmentPattern.php b/src/Detector/AlignmentPattern.php
new file mode 100644
index 000000000..cd7910bf7
--- /dev/null
+++ b/src/Detector/AlignmentPattern.php
@@ -0,0 +1,34 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Detector;
+
+/**
+ * Encapsulates an alignment pattern, which are the smaller square patterns found in
+ * all but the simplest QR Codes.
+ *
+ * @author Sean Owen
+ */
+final class AlignmentPattern extends ResultPoint{
+
+ /**
+ * Combines this object's current estimate of a finder pattern position and module size
+ * with a new estimate. It returns a new {@code FinderPattern} containing an average of the two.
+ */
+ public function combineEstimate(float $i, float $j, float $newModuleSize):self{
+ return new self(
+ ($this->x + $j) / 2.0,
+ ($this->y + $i) / 2.0,
+ ($this->estimatedModuleSize + $newModuleSize) / 2.0
+ );
+ }
+
+}
diff --git a/src/Detector/AlignmentPatternFinder.php b/src/Detector/AlignmentPatternFinder.php
new file mode 100644
index 000000000..a68e11589
--- /dev/null
+++ b/src/Detector/AlignmentPatternFinder.php
@@ -0,0 +1,284 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Detector;
+
+use chillerlan\QRCode\Decoder\BitMatrix;
+use function abs, count;
+
+/**
+ * This class attempts to find alignment patterns in a QR Code. Alignment patterns look like finder
+ * patterns but are smaller and appear at regular intervals throughout the image.
+ *
+ * At the moment this only looks for the bottom-right alignment pattern.
+ *
+ * This is mostly a simplified copy of {@link FinderPatternFinder}. It is copied,
+ * pasted and stripped down here for maximum performance but does unfortunately duplicate
+ * some code.
+ *
+ * This class is thread-safe but not reentrant. Each thread must allocate its own object.
+ *
+ * @author Sean Owen
+ */
+final class AlignmentPatternFinder{
+
+ private BitMatrix $bitMatrix;
+ private float $moduleSize;
+ /** @var \chillerlan\QRCode\Detector\AlignmentPattern[] */
+ private array $possibleCenters;
+
+ /**
+ * Creates a finder that will look in a portion of the whole image.
+ *
+ * @param \chillerlan\QRCode\Decoder\BitMatrix $image image to search
+ * @param float $moduleSize estimated module size so far
+ */
+ public function __construct(BitMatrix $image, float $moduleSize){
+ $this->bitMatrix = $image;
+ $this->moduleSize = $moduleSize;
+ $this->possibleCenters = [];
+ }
+
+ /**
+ * This method attempts to find the bottom-right alignment pattern in the image. It is a bit messy since
+ * it's pretty performance-critical and so is written to be fast foremost.
+ *
+ * @param int $startX left column from which to start searching
+ * @param int $startY top row from which to start searching
+ * @param int $width width of region to search
+ * @param int $height height of region to search
+ *
+ * @return \chillerlan\QRCode\Detector\AlignmentPattern|null
+ */
+ public function find(int $startX, int $startY, int $width, int $height):?AlignmentPattern{
+ $maxJ = $startX + $width;
+ $middleI = $startY + ($height / 2);
+ $stateCount = [];
+
+ // We are looking for black/white/black modules in 1:1:1 ratio;
+ // this tracks the number of black/white/black modules seen so far
+ for($iGen = 0; $iGen < $height; $iGen++){
+ // Search from middle outwards
+ $i = (int)($middleI + (($iGen & 0x01) === 0 ? ($iGen + 1) / 2 : -(($iGen + 1) / 2)));
+ $stateCount[0] = 0;
+ $stateCount[1] = 0;
+ $stateCount[2] = 0;
+ $j = $startX;
+ // Burn off leading white pixels before anything else; if we start in the middle of
+ // a white run, it doesn't make sense to count its length, since we don't know if the
+ // white run continued to the left of the start point
+ while($j < $maxJ && !$this->bitMatrix->get($j, $i)){
+ $j++;
+ }
+
+ $currentState = 0;
+
+ while($j < $maxJ){
+
+ if($this->bitMatrix->get($j, $i)){
+ // Black pixel
+ if($currentState === 1){ // Counting black pixels
+ $stateCount[$currentState]++;
+ }
+ // Counting white pixels
+ else{
+ // A winner?
+ if($currentState === 2){
+ // Yes
+ if($this->foundPatternCross($stateCount)){
+ $confirmed = $this->handlePossibleCenter($stateCount, $i, $j);
+
+ if($confirmed !== null){
+ return $confirmed;
+ }
+ }
+
+ $stateCount[0] = $stateCount[2];
+ $stateCount[1] = 1;
+ $stateCount[2] = 0;
+ $currentState = 1;
+ }
+ else{
+ $stateCount[++$currentState]++;
+ }
+ }
+ }
+ // White pixel
+ else{
+ // Counting black pixels
+ if($currentState === 1){
+ $currentState++;
+ }
+
+ $stateCount[$currentState]++;
+ }
+
+ $j++;
+ }
+
+ if($this->foundPatternCross($stateCount)){
+ $confirmed = $this->handlePossibleCenter($stateCount, $i, $maxJ);
+
+ if($confirmed !== null){
+ return $confirmed;
+ }
+ }
+
+ }
+
+ // Hmm, nothing we saw was observed and confirmed twice. If we had
+ // any guess at all, return it.
+ if(count($this->possibleCenters)){
+ return $this->possibleCenters[0];
+ }
+
+ return null;
+ }
+
+ /**
+ * @param int[] $stateCount count of black/white/black pixels just read
+ *
+ * @return bool true if the proportions of the counts is close enough to the 1/1/1 ratios
+ * used by alignment patterns to be considered a match
+ */
+ private function foundPatternCross(array $stateCount):bool{
+ $moduleSize = $this->moduleSize;
+ $maxVariance = $moduleSize / 2.0;
+
+ for($i = 0; $i < 3; $i++){
+ if(abs($moduleSize - $stateCount[$i]) >= $maxVariance){
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * This is called when a horizontal scan finds a possible alignment pattern. It will
+ * cross check with a vertical scan, and if successful, will see if this pattern had been
+ * found on a previous horizontal scan. If so, we consider it confirmed and conclude we have
+ * found the alignment pattern.
+ *
+ * @param int[] $stateCount reading state module counts from horizontal scan
+ * @param int $i row where alignment pattern may be found
+ * @param int $j end of possible alignment pattern in row
+ *
+ * @return \chillerlan\QRCode\Detector\AlignmentPattern|null if we have found the same pattern twice, or null if not
+ */
+ private function handlePossibleCenter(array $stateCount, int $i, int $j):?AlignmentPattern{
+ $stateCountTotal = $stateCount[0] + $stateCount[1] + $stateCount[2];
+ $centerJ = $this->centerFromEnd($stateCount, $j);
+ $centerI = $this->crossCheckVertical($i, (int)$centerJ, 2 * $stateCount[1], $stateCountTotal);
+
+ if($centerI !== null){
+ $estimatedModuleSize = (float)($stateCount[0] + $stateCount[1] + $stateCount[2]) / 3.0;
+
+ foreach($this->possibleCenters as $center){
+ // Look for about the same center and module size:
+ if($center->aboutEquals($estimatedModuleSize, $centerI, $centerJ)){
+ return $center->combineEstimate($centerI, $centerJ, $estimatedModuleSize);
+ }
+ }
+
+ // Hadn't found this before; save it
+ $point = new AlignmentPattern($centerJ, $centerI, $estimatedModuleSize);
+ $this->possibleCenters[] = $point;
+ }
+
+ return null;
+ }
+
+ /**
+ * Given a count of black/white/black pixels just seen and an end position,
+ * figures the location of the center of this black/white/black run.
+ *
+ * @param int[] $stateCount
+ * @param int $end
+ *
+ * @return float
+ */
+ private function centerFromEnd(array $stateCount, int $end):float{
+ return (float)(($end - $stateCount[2]) - $stateCount[1] / 2.0);
+ }
+
+ /**
+ * After a horizontal scan finds a potential alignment pattern, this method
+ * "cross-checks" by scanning down vertically through the center of the possible
+ * alignment pattern to see if the same proportion is detected.
+ *
+ * @param int $startI row where an alignment pattern was detected
+ * @param int $centerJ center of the section that appears to cross an alignment pattern
+ * @param int $maxCount maximum reasonable number of modules that should be
+ * observed in any reading state, based on the results of the horizontal scan
+ * @param int $originalStateCountTotal
+ *
+ * @return float|null vertical center of alignment pattern, or null if not found
+ */
+ private function crossCheckVertical(int $startI, int $centerJ, int $maxCount, int $originalStateCountTotal):?float{
+ $maxI = $this->bitMatrix->getDimension();
+ $stateCount = [];
+ $stateCount[0] = 0;
+ $stateCount[1] = 0;
+ $stateCount[2] = 0;
+
+ // Start counting up from center
+ $i = $startI;
+ while($i >= 0 && $this->bitMatrix->get($centerJ, $i) && $stateCount[1] <= $maxCount){
+ $stateCount[1]++;
+ $i--;
+ }
+ // If already too many modules in this state or ran off the edge:
+ if($i < 0 || $stateCount[1] > $maxCount){
+ return null;
+ }
+
+ while($i >= 0 && !$this->bitMatrix->get($centerJ, $i) && $stateCount[0] <= $maxCount){
+ $stateCount[0]++;
+ $i--;
+ }
+
+ if($stateCount[0] > $maxCount){
+ return null;
+ }
+
+ // Now also count down from center
+ $i = $startI + 1;
+ while($i < $maxI && $this->bitMatrix->get($centerJ, $i) && $stateCount[1] <= $maxCount){
+ $stateCount[1]++;
+ $i++;
+ }
+
+ if($i == $maxI || $stateCount[1] > $maxCount){
+ return null;
+ }
+
+ while($i < $maxI && !$this->bitMatrix->get($centerJ, $i) && $stateCount[2] <= $maxCount){
+ $stateCount[2]++;
+ $i++;
+ }
+
+ if($stateCount[2] > $maxCount){
+ return null;
+ }
+
+ if(5 * abs(($stateCount[0] + $stateCount[1] + $stateCount[2]) - $originalStateCountTotal) >= 2 * $originalStateCountTotal){
+ return null;
+ }
+
+ if(!$this->foundPatternCross($stateCount)){
+ return null;
+ }
+
+ return $this->centerFromEnd($stateCount, $i);
+ }
+
+}
diff --git a/src/Detector/Detector.php b/src/Detector/Detector.php
new file mode 100644
index 000000000..46dba837a
--- /dev/null
+++ b/src/Detector/Detector.php
@@ -0,0 +1,357 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Detector;
+
+use RuntimeException;
+use chillerlan\QRCode\Common\Version;
+use chillerlan\QRCode\Decoder\BitMatrix;
+use function abs, is_nan, max, min, round;
+use const NAN;
+
+/**
+ * Encapsulates logic that can detect a QR Code in an image, even if the QR Code
+ * is rotated or skewed, or partially obscured.
+ *
+ * @author Sean Owen
+ */
+final class Detector{
+
+ private BitMatrix $bitMatrix;
+
+ /**
+ * Detector constructor.
+ */
+ public function __construct(BitMatrix $image){
+ $this->bitMatrix = $image;
+ }
+
+ /**
+ * Detects a QR Code in an image.
+ */
+ public function detect():BitMatrix{
+ [$bottomLeft, $topLeft, $topRight] = (new FinderPatternFinder($this->bitMatrix))->find();
+
+ $moduleSize = (float)$this->calculateModuleSize($topLeft, $topRight, $bottomLeft);
+ $dimension = $this->computeDimension($topLeft, $topRight, $bottomLeft, $moduleSize);
+ $provisionalVersion = new Version((int)(($dimension - 17) / 4));
+ $alignmentPattern = null;
+
+ // Anything above version 1 has an alignment pattern
+ if(!empty($provisionalVersion->getAlignmentPattern())){
+ // Guess where a "bottom right" finder pattern would have been
+ $bottomRightX = $topRight->getX() - $topLeft->getX() + $bottomLeft->getX();
+ $bottomRightY = $topRight->getY() - $topLeft->getY() + $bottomLeft->getY();
+
+ // Estimate that alignment pattern is closer by 3 modules
+ // from "bottom right" to known top left location
+ $correctionToTopLeft = 1.0 - 3.0 / (float)($provisionalVersion->getDimension() - 7);
+ $estAlignmentX = (int)($topLeft->getX() + $correctionToTopLeft * ($bottomRightX - $topLeft->getX()));
+ $estAlignmentY = (int)($topLeft->getY() + $correctionToTopLeft * ($bottomRightY - $topLeft->getY()));
+
+ // Kind of arbitrary -- expand search radius before giving up
+ for($i = 4; $i <= 16; $i <<= 1){//??????????
+ $alignmentPattern = $this->findAlignmentInRegion($moduleSize, $estAlignmentX, $estAlignmentY, (float)$i);
+
+ if($alignmentPattern !== null){
+ break;
+ }
+ }
+ // If we didn't find alignment pattern... well try anyway without it
+ }
+
+ $transform = $this->createTransform($topLeft, $topRight, $bottomLeft, $dimension, $alignmentPattern);
+
+ return (new GridSampler)->sampleGrid($this->bitMatrix, $dimension, $transform);
+ }
+
+ /**
+ * Computes an average estimated module size based on estimated derived from the positions
+ * of the three finder patterns.
+ *
+ * @throws \RuntimeException
+ */
+ private function calculateModuleSize(FinderPattern $topLeft, FinderPattern $topRight, FinderPattern $bottomLeft):float{
+ // Take the average
+ $moduleSize = (
+ $this->calculateModuleSizeOneWay($topLeft, $topRight) +
+ $this->calculateModuleSizeOneWay($topLeft, $bottomLeft)
+ ) / 2.0;
+
+ if($moduleSize < 1.0){
+ throw new RuntimeException('module size < 1.0');
+ }
+
+ return $moduleSize;
+ }
+
+ /**
+ * Estimates module size based on two finder patterns -- it uses
+ * {@link #sizeOfBlackWhiteBlackRunBothWays(int, int, int, int)} to figure the
+ * width of each, measuring along the axis between their centers.
+ */
+ private function calculateModuleSizeOneWay(FinderPattern $pattern, FinderPattern $otherPattern):float{
+
+ $moduleSizeEst1 = $this->sizeOfBlackWhiteBlackRunBothWays(
+ $pattern->getX(),
+ $pattern->getY(),
+ $otherPattern->getX(),
+ $otherPattern->getY()
+ );
+
+ $moduleSizeEst2 = $this->sizeOfBlackWhiteBlackRunBothWays(
+ $otherPattern->getX(),
+ $otherPattern->getY(),
+ $pattern->getX(),
+ $pattern->getY()
+ );
+
+ if(is_nan($moduleSizeEst1)){
+ return $moduleSizeEst2 / 7.0;
+ }
+
+ if(is_nan($moduleSizeEst2)){
+ return $moduleSizeEst1 / 7.0;
+ }
+ // Average them, and divide by 7 since we've counted the width of 3 black modules,
+ // and 1 white and 1 black module on either side. Ergo, divide sum by 14.
+ return ($moduleSizeEst1 + $moduleSizeEst2) / 14.0;
+ }
+
+ /**
+ * See {@link #sizeOfBlackWhiteBlackRun(int, int, int, int)}; computes the total width of
+ * a finder pattern by looking for a black-white-black run from the center in the direction
+ * of another po$(another finder pattern center), and in the opposite direction too.
+ */
+ private function sizeOfBlackWhiteBlackRunBothWays(float $fromX, float $fromY, float $toX, float $toY):float{
+ $result = $this->sizeOfBlackWhiteBlackRun((int)$fromX, (int)$fromY, (int)$toX, (int)$toY);
+ $dimension = $this->bitMatrix->getDimension();
+ // Now count other way -- don't run off image though of course
+ $scale = 1.0;
+ $otherToX = $fromX - ($toX - $fromX);
+
+ if($otherToX < 0){
+ $scale = $fromX / ($fromX - $otherToX);
+ $otherToX = 0;
+ }
+ elseif($otherToX >= $dimension){
+ $scale = ($dimension - 1 - $fromX) / ($otherToX - $fromX);
+ $otherToX = $dimension - 1;
+ }
+
+ $otherToY = (int)($fromY - ($toY - $fromY) * $scale);
+ $scale = 1.0;
+
+ if($otherToY < 0){
+ $scale = $fromY / ($fromY - $otherToY);
+ $otherToY = 0;
+ }
+ elseif($otherToY >= $dimension){
+ $scale = ($dimension - 1 - $fromY) / ($otherToY - $fromY);
+ $otherToY = $dimension - 1;
+ }
+
+ $otherToX = (int)($fromX + ($otherToX - $fromX) * $scale);
+ $result += $this->sizeOfBlackWhiteBlackRun((int)$fromX, (int)$fromY, (int)$otherToX, (int)$otherToY);
+
+ // Middle pixel is double-counted this way; subtract 1
+ return $result - 1.0;
+ }
+
+ /**
+ * This method traces a line from a po$in the image, in the direction towards another point.
+ * It begins in a black region, and keeps going until it finds white, then black, then white again.
+ * It reports the distance from the start to this point.
+ *
+ * This is used when figuring out how wide a finder pattern is, when the finder pattern
+ * may be skewed or rotated.
+ */
+ private function sizeOfBlackWhiteBlackRun(int $fromX, int $fromY, int $toX, int $toY):float{
+ // Mild variant of Bresenham's algorithm;
+ // see http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
+ $steep = abs($toY - $fromY) > abs($toX - $fromX);
+
+ if($steep){
+ $temp = $fromX;
+ $fromX = $fromY;
+ $fromY = $temp;
+ $temp = $toX;
+ $toX = $toY;
+ $toY = $temp;
+ }
+
+ $dx = abs($toX - $fromX);
+ $dy = abs($toY - $fromY);
+ $error = -$dx / 2;
+ $xstep = $fromX < $toX ? 1 : -1;
+ $ystep = $fromY < $toY ? 1 : -1;
+
+ // In black pixels, looking for white, first or second time.
+ $state = 0;
+ // Loop up until x == toX, but not beyond
+ $xLimit = $toX + $xstep;
+
+ for($x = $fromX, $y = $fromY; $x !== $xLimit; $x += $xstep){
+ $realX = $steep ? $y : $x;
+ $realY = $steep ? $x : $y;
+
+ // Does current pixel mean we have moved white to black or vice versa?
+ // Scanning black in state 0,2 and white in state 1, so if we find the wrong
+ // color, advance to next state or end if we are in state 2 already
+ if(($state === 1) === $this->bitMatrix->get($realX, $realY)){
+
+ if($state === 2){
+ return FinderPattern::distance($x, $y, $fromX, $fromY);
+ }
+
+ $state++;
+ }
+
+ $error += $dy;
+
+ if($error > 0){
+
+ if($y === $toY){
+ break;
+ }
+
+ $y += $ystep;
+ $error -= $dx;
+ }
+ }
+
+ // Found black-white-black; give the benefit of the doubt that the next pixel outside the image
+ // is "white" so this last po$at (toX+xStep,toY) is the right ending. This is really a
+ // small approximation; (toX+xStep,toY+yStep) might be really correct. Ignore this.
+ if($state === 2){
+ return FinderPattern::distance($toX + $xstep, $toY, $fromX, $fromY);
+ }
+
+ // else we didn't find even black-white-black; no estimate is really possible
+ return NAN;
+ }
+
+ /**
+ * Computes the dimension (number of modules on a size) of the QR Code based on the position
+ * of the finder patterns and estimated module size.
+ *
+ * @throws \RuntimeException
+ */
+ private function computeDimension(
+ FinderPattern $topLeft,
+ FinderPattern $topRight,
+ FinderPattern $bottomLeft,
+ float $moduleSize
+ ):int{
+ $tltrCentersDimension = (int)round($topLeft->getDistance($topRight) / $moduleSize);
+ $tlblCentersDimension = (int)round($topLeft->getDistance($bottomLeft) / $moduleSize);
+ $dimension = (int)((($tltrCentersDimension + $tlblCentersDimension) / 2) + 7);
+
+ switch($dimension % 4){
+ case 0:
+ $dimension++;
+ break;
+ // 1? do nothing
+ case 2:
+ $dimension--;
+ break;
+ case 3:
+ throw new RuntimeException('estimated dimension: '.$dimension);
+ }
+
+ if($dimension % 4 !== 1){
+ throw new RuntimeException('dimension mod 4 is not 1');
+ }
+
+ return $dimension;
+ }
+
+ /**
+ * Attempts to locate an alignment pattern in a limited region of the image, which is
+ * guessed to contain it.
+ *
+ * @param float $overallEstModuleSize estimated module size so far
+ * @param int $estAlignmentX x coordinate of center of area probably containing alignment pattern
+ * @param int $estAlignmentY y coordinate of above
+ * @param float $allowanceFactor number of pixels in all directions to search from the center
+ *
+ * @return \chillerlan\QRCode\Detector\AlignmentPattern|null if found, or null otherwise
+ */
+ private function findAlignmentInRegion(
+ float $overallEstModuleSize,
+ int $estAlignmentX,
+ int $estAlignmentY,
+ float $allowanceFactor
+ ):?AlignmentPattern{
+ // Look for an alignment pattern (3 modules in size) around where it should be
+ $dimension = $this->bitMatrix->getDimension();
+ $allowance = (int)($allowanceFactor * $overallEstModuleSize);
+ $alignmentAreaLeftX = max(0, $estAlignmentX - $allowance);
+ $alignmentAreaRightX = min($dimension - 1, $estAlignmentX + $allowance);
+
+ if($alignmentAreaRightX - $alignmentAreaLeftX < $overallEstModuleSize * 3){
+ return null;
+ }
+
+ $alignmentAreaTopY = max(0, $estAlignmentY - $allowance);
+ $alignmentAreaBottomY = min($dimension - 1, $estAlignmentY + $allowance);
+
+ if($alignmentAreaBottomY - $alignmentAreaTopY < $overallEstModuleSize * 3){
+ return null;
+ }
+
+ return (new AlignmentPatternFinder($this->bitMatrix, $overallEstModuleSize))->find(
+ $alignmentAreaLeftX,
+ $alignmentAreaTopY,
+ $alignmentAreaRightX - $alignmentAreaLeftX,
+ $alignmentAreaBottomY - $alignmentAreaTopY,
+ );
+ }
+
+ /**
+ *
+ */
+ private function createTransform(
+ FinderPattern $topLeft,
+ FinderPattern $topRight,
+ FinderPattern $bottomLeft,
+ int $dimension,
+ AlignmentPattern $alignmentPattern = null
+ ):PerspectiveTransform{
+ $dimMinusThree = (float)$dimension - 3.5;
+
+ if($alignmentPattern instanceof AlignmentPattern){
+ $bottomRightX = $alignmentPattern->getX();
+ $bottomRightY = $alignmentPattern->getY();
+ $sourceBottomRightX = $dimMinusThree - 3.0;
+ $sourceBottomRightY = $sourceBottomRightX;
+ }
+ else{
+ // Don't have an alignment pattern, just make up the bottom-right point
+ $bottomRightX = ($topRight->getX() - $topLeft->getX()) + $bottomLeft->getX();
+ $bottomRightY = ($topRight->getY() - $topLeft->getY()) + $bottomLeft->getY();
+ $sourceBottomRightX = $dimMinusThree;
+ $sourceBottomRightY = $dimMinusThree;
+ }
+
+ return (new PerspectiveTransform)->quadrilateralToQuadrilateral(
+ 3.5, 3.5,
+ $dimMinusThree, 3.5,
+ $sourceBottomRightX, $sourceBottomRightY,
+ 3.5, $dimMinusThree,
+ $topLeft->getX(), $topLeft->getY(),
+ $topRight->getX(), $topRight->getY(),
+ $bottomRightX, $bottomRightY,
+ $bottomLeft->getX(), $bottomLeft->getY()
+ );
+ }
+
+}
diff --git a/src/Detector/FinderPattern.php b/src/Detector/FinderPattern.php
new file mode 100644
index 000000000..89339ce10
--- /dev/null
+++ b/src/Detector/FinderPattern.php
@@ -0,0 +1,92 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Detector;
+
+use function sqrt;
+
+/**
+ * Encapsulates a finder pattern, which are the three square patterns found in
+ * the corners of QR Codes. It also encapsulates a count of similar finder patterns,
+ * as a convenience to the finder's bookkeeping.
+ *
+ * @author Sean Owen
+ */
+final class FinderPattern extends ResultPoint{
+
+ private int $count;
+
+ /**
+ *
+ */
+ public function __construct(float $posX, float $posY, float $estimatedModuleSize, int $count = null){
+ parent::__construct($posX, $posY, $estimatedModuleSize);
+
+ $this->count = $count ?? 1;
+ }
+
+ /**
+ *
+ */
+ public function getCount():int{
+ return $this->count;
+ }
+
+ /**
+ * @param \chillerlan\QRCode\Detector\FinderPattern $b second pattern
+ *
+ * @return float distance between two points
+ */
+ public function getDistance(FinderPattern $b):float{
+ return self::distance($this->x, $this->y, $b->x, $b->y);
+ }
+
+ /**
+ * Get square of distance between a and b.
+ */
+ public function getSquaredDistance(FinderPattern $b):float{
+ return self::squaredDistance($this->x, $this->y, $b->x, $b->y);
+ }
+
+ /**
+ * Combines this object's current estimate of a finder pattern position and module size
+ * with a new estimate. It returns a new {@code FinderPattern} containing a weighted average
+ * based on count.
+ */
+ public function combineEstimate(float $i, float $j, float $newModuleSize):self{
+ $combinedCount = $this->count + 1;
+
+ return new self(
+ ($this->count * $this->x + $j) / $combinedCount,
+ ($this->count * $this->y + $i) / $combinedCount,
+ ($this->count * $this->estimatedModuleSize + $newModuleSize) / $combinedCount,
+ $combinedCount
+ );
+ }
+
+ /**
+ *
+ */
+ private static function squaredDistance(float $aX, float $aY, float $bX, float $bY):float{
+ $xDiff = $aX - $bX;
+ $yDiff = $aY - $bY;
+
+ return $xDiff * $xDiff + $yDiff * $yDiff;
+ }
+
+ /**
+ *
+ */
+ public static function distance(float $aX, float $aY, float $bX, float $bY):float{
+ return sqrt(self::squaredDistance($aX, $aY, $bX, $bY));
+ }
+
+}
diff --git a/src/Detector/FinderPatternFinder.php b/src/Detector/FinderPatternFinder.php
new file mode 100644
index 000000000..251868647
--- /dev/null
+++ b/src/Detector/FinderPatternFinder.php
@@ -0,0 +1,766 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ *
+ * @phan-file-suppress PhanTypePossiblyInvalidDimOffset
+ */
+
+namespace chillerlan\QRCode\Detector;
+
+use RuntimeException;
+use chillerlan\QRCode\Decoder\BitMatrix;
+use function abs, count, usort;
+use const PHP_FLOAT_MAX;
+
+/**
+ * This class attempts to find finder patterns in a QR Code. Finder patterns are the square
+ * markers at three corners of a QR Code.
+ *
+ * This class is thread-safe but not reentrant. Each thread must allocate its own object.
+ *
+ * @author Sean Owen
+ */
+final class FinderPatternFinder{
+
+ private const MIN_SKIP = 2;
+ private const MAX_MODULES = 177; // 1 pixel/module times 3 modules/center
+ private const CENTER_QUORUM = 2; // support up to version 10 for mobile clients
+ private BitMatrix $bitMatrix;
+ /** @var \chillerlan\QRCode\Detector\FinderPattern[] */
+ private array $possibleCenters;
+ private bool $hasSkipped = false;
+
+ /**
+ *
Creates a finder that will search the image for three finder patterns.
+ *
+ * @param BitMatrix $bitMatrix image to search
+ */
+ public function __construct(BitMatrix $bitMatrix){
+ $this->bitMatrix = $bitMatrix;
+ $this->possibleCenters = [];
+ }
+
+ /**
+ * @return \chillerlan\QRCode\Detector\FinderPattern[]
+ */
+ public function find():array{
+ $dimension = $this->bitMatrix->getDimension();
+
+ // We are looking for black/white/black/white/black modules in
+ // 1:1:3:1:1 ratio; this tracks the number of such modules seen so far
+ // Let's assume that the maximum version QR Code we support takes up 1/4 the height of the
+ // image, and then account for the center being 3 modules in size. This gives the smallest
+ // number of pixels the center could be, so skip this often.
+ $iSkip = (int)((3 * $dimension) / (4 * self::MAX_MODULES));
+
+ if($iSkip < self::MIN_SKIP){
+ $iSkip = self::MIN_SKIP;
+ }
+
+ $done = false;
+
+ for($i = $iSkip - 1; $i < $dimension && !$done; $i += $iSkip){
+ // Get a row of black/white values
+ $stateCount = $this->getCrossCheckStateCount();
+ $currentState = 0;
+
+ for($j = 0; $j < $dimension; $j++){
+
+ // Black pixel
+ if($this->bitMatrix->get($j, $i)){
+ // Counting white pixels
+ if(($currentState & 1) === 1){
+ $currentState++;
+ }
+
+ $stateCount[$currentState]++;
+ }
+ // White pixel
+ else{
+ // Counting black pixels
+ if(($currentState & 1) === 0){
+ // A winner?
+ if($currentState === 4){
+ // Yes
+ if($this->foundPatternCross($stateCount)){
+ $confirmed = $this->handlePossibleCenter($stateCount, $i, $j);
+
+ if($confirmed){
+ // Start examining every other line. Checking each line turned out to be too
+ // expensive and didn't improve performance.
+ $iSkip = 3;
+
+ if($this->hasSkipped){
+ $done = $this->haveMultiplyConfirmedCenters();
+ }
+ else{
+ $rowSkip = $this->findRowSkip();
+
+ if($rowSkip > $stateCount[2]){
+ // Skip rows between row of lower confirmed center
+ // and top of presumed third confirmed center
+ // but back up a bit to get a full chance of detecting
+ // it, entire width of center of finder pattern
+
+ // Skip by rowSkip, but back off by $stateCount[2] (size of last center
+ // of pattern we saw) to be conservative, and also back off by iSkip which
+ // is about to be re-added
+ $i += $rowSkip - $stateCount[2] - $iSkip;
+ $j = $dimension - 1;
+ }
+ }
+ }
+ else{
+ $stateCount = $this->doShiftCounts2($stateCount);
+ $currentState = 3;
+
+ continue;
+ }
+ // Clear state to start looking again
+ $currentState = 0;
+ $stateCount = $this->getCrossCheckStateCount();
+ }
+ // No, shift counts back by two
+ else{
+ $stateCount = $this->doShiftCounts2($stateCount);
+ $currentState = 3;
+ }
+ }
+ else{
+ $stateCount[++$currentState]++;
+ }
+ }
+ // Counting white pixels
+ else{
+ $stateCount[$currentState]++;
+ }
+ }
+ }
+
+ if($this->foundPatternCross($stateCount)){
+ $confirmed = $this->handlePossibleCenter($stateCount, $i, $dimension);
+
+ if($confirmed){
+ $iSkip = $stateCount[0];
+
+ if($this->hasSkipped){
+ // Found a third one
+ $done = $this->haveMultiplyConfirmedCenters();
+ }
+ }
+ }
+ }
+
+ return $this->orderBestPatterns($this->selectBestPatterns());
+ }
+
+ /**
+ * @return int[]
+ */
+ private function getCrossCheckStateCount():array{
+ return [0, 0, 0, 0, 0];
+ }
+
+ /**
+ * @param int[] $stateCount
+ *
+ * @return int[]
+ */
+ private function doShiftCounts2(array $stateCount):array{
+ $stateCount[0] = $stateCount[2];
+ $stateCount[1] = $stateCount[3];
+ $stateCount[2] = $stateCount[4];
+ $stateCount[3] = 1;
+ $stateCount[4] = 0;
+
+ return $stateCount;
+ }
+
+ /**
+ * Given a count of black/white/black/white/black pixels just seen and an end position,
+ * figures the location of the center of this run.
+ *
+ * @param int[] $stateCount
+ */
+ private function centerFromEnd(array $stateCount, int $end):float{
+ return (float)(($end - $stateCount[4] - $stateCount[3]) - $stateCount[2] / 2.0);
+ }
+
+ /**
+ * @param int[] $stateCount
+ */
+ private function foundPatternCross(array $stateCount):bool{
+ // Allow less than 50% variance from 1-1-3-1-1 proportions
+ return $this->foundPatternVariance($stateCount, 2.0);
+ }
+
+ /**
+ * @param int[] $stateCount
+ */
+ private function foundPatternDiagonal(array $stateCount):bool{
+ // Allow less than 75% variance from 1-1-3-1-1 proportions
+ return $this->foundPatternVariance($stateCount, 1.333);
+ }
+
+ /**
+ * @param int[] $stateCount count of black/white/black/white/black pixels just read
+ *
+ * @return bool true if the proportions of the counts is close enough to the 1/1/3/1/1 ratios
+ * used by finder patterns to be considered a match
+ */
+ private function foundPatternVariance(array $stateCount, float $variance):bool{
+ $totalModuleSize = 0;
+
+ for($i = 0; $i < 5; $i++){
+ $count = $stateCount[$i];
+
+ if($count === 0){
+ return false;
+ }
+
+ $totalModuleSize += $count;
+ }
+
+ if($totalModuleSize < 7){
+ return false;
+ }
+
+ $moduleSize = $totalModuleSize / 7.0;
+ $maxVariance = $moduleSize / $variance;
+
+ return
+ abs($moduleSize - $stateCount[0]) < $maxVariance
+ && abs($moduleSize - $stateCount[1]) < $maxVariance
+ && abs(3.0 * $moduleSize - $stateCount[2]) < 3 * $maxVariance
+ && abs($moduleSize - $stateCount[3]) < $maxVariance
+ && abs($moduleSize - $stateCount[4]) < $maxVariance;
+ }
+
+ /**
+ * After a vertical and horizontal scan finds a potential finder pattern, this method
+ * "cross-cross-cross-checks" by scanning down diagonally through the center of the possible
+ * finder pattern to see if the same proportion is detected.
+ *
+ * @param $centerI ; row where a finder pattern was detected
+ * @param $centerJ ; center of the section that appears to cross a finder pattern
+ *
+ * @return bool true if proportions are withing expected limits
+ */
+ private function crossCheckDiagonal(int $centerI, int $centerJ):bool{
+ $stateCount = $this->getCrossCheckStateCount();
+
+ // Start counting up, left from center finding black center mass
+ $i = 0;
+
+ while($centerI >= $i && $centerJ >= $i && $this->bitMatrix->get($centerJ - $i, $centerI - $i)){
+ $stateCount[2]++;
+ $i++;
+ }
+
+ if($stateCount[2] === 0){
+ return false;
+ }
+
+ // Continue up, left finding white space
+ while($centerI >= $i && $centerJ >= $i && !$this->bitMatrix->get($centerJ - $i, $centerI - $i)){
+ $stateCount[1]++;
+ $i++;
+ }
+
+ if($stateCount[1] === 0){
+ return false;
+ }
+
+ // Continue up, left finding black border
+ while($centerI >= $i && $centerJ >= $i && $this->bitMatrix->get($centerJ - $i, $centerI - $i)){
+ $stateCount[0]++;
+ $i++;
+ }
+
+ if($stateCount[0] === 0){
+ return false;
+ }
+
+ $dimension = $this->bitMatrix->getDimension();
+
+ // Now also count down, right from center
+ $i = 1;
+ while($centerI + $i < $dimension && $centerJ + $i < $dimension && $this->bitMatrix->get($centerJ + $i, $centerI + $i)){
+ $stateCount[2]++;
+ $i++;
+ }
+
+ while($centerI + $i < $dimension && $centerJ + $i < $dimension && !$this->bitMatrix->get($centerJ + $i, $centerI + $i)){
+ $stateCount[3]++;
+ $i++;
+ }
+
+ if($stateCount[3] === 0){
+ return false;
+ }
+
+ while($centerI + $i < $dimension && $centerJ + $i < $dimension && $this->bitMatrix->get($centerJ + $i, $centerI + $i)){
+ $stateCount[4]++;
+ $i++;
+ }
+
+ if($stateCount[4] === 0){
+ return false;
+ }
+
+ return $this->foundPatternDiagonal($stateCount);
+ }
+
+ /**
+ * After a horizontal scan finds a potential finder pattern, this method
+ * "cross-checks" by scanning down vertically through the center of the possible
+ * finder pattern to see if the same proportion is detected.
+ *
+ * @param int $startI ; row where a finder pattern was detected
+ * @param int $centerJ ; center of the section that appears to cross a finder pattern
+ * @param int $maxCount ; maximum reasonable number of modules that should be
+ * observed in any reading state, based on the results of the horizontal scan
+ * @param int $originalStateCountTotal
+ *
+ * @return float|null vertical center of finder pattern, or null if not found
+ */
+ private function crossCheckVertical(int $startI, int $centerJ, int $maxCount, int $originalStateCountTotal):?float{
+ $maxI = $this->bitMatrix->getDimension();
+ $stateCount = $this->getCrossCheckStateCount();
+
+ // Start counting up from center
+ $i = $startI;
+ while($i >= 0 && $this->bitMatrix->get($centerJ, $i)){
+ $stateCount[2]++;
+ $i--;
+ }
+
+ if($i < 0){
+ return null;
+ }
+
+ while($i >= 0 && !$this->bitMatrix->get($centerJ, $i) && $stateCount[1] <= $maxCount){
+ $stateCount[1]++;
+ $i--;
+ }
+
+ // If already too many modules in this state or ran off the edge:
+ if($i < 0 || $stateCount[1] > $maxCount){
+ return null;
+ }
+
+ while($i >= 0 && $this->bitMatrix->get($centerJ, $i) && $stateCount[0] <= $maxCount){
+ $stateCount[0]++;
+ $i--;
+ }
+
+ if($stateCount[0] > $maxCount){
+ return null;
+ }
+
+ // Now also count down from center
+ $i = $startI + 1;
+ while($i < $maxI && $this->bitMatrix->get($centerJ, $i)){
+ $stateCount[2]++;
+ $i++;
+ }
+
+ if($i === $maxI){
+ return null;
+ }
+
+ while($i < $maxI && !$this->bitMatrix->get($centerJ, $i) && $stateCount[3] < $maxCount){
+ $stateCount[3]++;
+ $i++;
+ }
+
+ if($i === $maxI || $stateCount[3] >= $maxCount){
+ return null;
+ }
+
+ while($i < $maxI && $this->bitMatrix->get($centerJ, $i) && $stateCount[4] < $maxCount){
+ $stateCount[4]++;
+ $i++;
+ }
+
+ if($stateCount[4] >= $maxCount){
+ return null;
+ }
+
+ // If we found a finder-pattern-like section, but its size is more than 40% different than
+ // the original, assume it's a false positive
+ $stateCountTotal = $stateCount[0] + $stateCount[1] + $stateCount[2] + $stateCount[3] + $stateCount[4];
+
+ if(5 * abs($stateCountTotal - $originalStateCountTotal) >= 2 * $originalStateCountTotal){
+ return null;
+ }
+
+ if(!$this->foundPatternCross($stateCount)){
+ return null;
+ }
+
+ return $this->centerFromEnd($stateCount, $i);
+ }
+
+ /**
+ * Like {@link #crossCheckVertical(int, int, int, int)}, and in fact is basically identical,
+ * except it reads horizontally instead of vertically. This is used to cross-cross
+ * check a vertical cross check and locate the real center of the alignment pattern.
+ */
+ private function crossCheckHorizontal(int $startJ, int $centerI, int $maxCount, int $originalStateCountTotal):?float{
+ $maxJ = $this->bitMatrix->getDimension();
+ $stateCount = $this->getCrossCheckStateCount();
+
+ $j = $startJ;
+ while($j >= 0 && $this->bitMatrix->get($j, $centerI)){
+ $stateCount[2]++;
+ $j--;
+ }
+
+ if($j < 0){
+ return null;
+ }
+
+ while($j >= 0 && !$this->bitMatrix->get($j, $centerI) && $stateCount[1] <= $maxCount){
+ $stateCount[1]++;
+ $j--;
+ }
+
+ if($j < 0 || $stateCount[1] > $maxCount){
+ return null;
+ }
+
+ while($j >= 0 && $this->bitMatrix->get($j, $centerI) && $stateCount[0] <= $maxCount){
+ $stateCount[0]++;
+ $j--;
+ }
+
+ if($stateCount[0] > $maxCount){
+ return null;
+ }
+
+ $j = $startJ + 1;
+ while($j < $maxJ && $this->bitMatrix->get($j, $centerI)){
+ $stateCount[2]++;
+ $j++;
+ }
+
+ if($j === $maxJ){
+ return null;
+ }
+
+ while($j < $maxJ && !$this->bitMatrix->get($j, $centerI) && $stateCount[3] < $maxCount){
+ $stateCount[3]++;
+ $j++;
+ }
+
+ if($j === $maxJ || $stateCount[3] >= $maxCount){
+ return null;
+ }
+
+ while($j < $maxJ && $this->bitMatrix->get($j, $centerI) && $stateCount[4] < $maxCount){
+ $stateCount[4]++;
+ $j++;
+ }
+
+ if($stateCount[4] >= $maxCount){
+ return null;
+ }
+
+ // If we found a finder-pattern-like section, but its size is significantly different than
+ // the original, assume it's a false positive
+ $stateCountTotal = $stateCount[0] + $stateCount[1] + $stateCount[2] + $stateCount[3] + $stateCount[4];
+
+ if(5 * abs($stateCountTotal - $originalStateCountTotal) >= $originalStateCountTotal){
+ return null;
+ }
+
+ if(!$this->foundPatternCross($stateCount)){
+ return null;
+ }
+
+ return $this->centerFromEnd($stateCount, $j);
+ }
+
+ /**
+ * This is called when a horizontal scan finds a possible alignment pattern. It will
+ * cross check with a vertical scan, and if successful, will, ah, cross-cross-check
+ * with another horizontal scan. This is needed primarily to locate the real horizontal
+ * center of the pattern in cases of extreme skew.
+ * And then we cross-cross-cross check with another diagonal scan.
+ *
+ * If that succeeds the finder pattern location is added to a list that tracks
+ * the number of times each location has been nearly-matched as a finder pattern.
+ * Each additional find is more evidence that the location is in fact a finder
+ * pattern center
+ *
+ * @param int[] $stateCount reading state module counts from horizontal scan
+ * @param int $i row where finder pattern may be found
+ * @param int $j end of possible finder pattern in row
+ *
+ * @return bool if a finder pattern candidate was found this time
+ */
+ private function handlePossibleCenter(array $stateCount, int $i, int $j):bool{
+ $stateCountTotal = $stateCount[0] + $stateCount[1] + $stateCount[2] + $stateCount[3] + $stateCount[4];
+ $centerJ = $this->centerFromEnd($stateCount, $j);
+ $centerI = $this->crossCheckVertical($i, (int)$centerJ, $stateCount[2], $stateCountTotal);
+
+ if($centerI !== null){
+ // Re-cross check
+ $centerJ = $this->crossCheckHorizontal((int)$centerJ, (int)$centerI, $stateCount[2], $stateCountTotal);
+ if($centerJ !== null && ($this->crossCheckDiagonal((int)$centerI, (int)$centerJ))){
+ $estimatedModuleSize = $stateCountTotal / 7.0;
+ $found = false;
+
+ for($index = 0; $index < count($this->possibleCenters); $index++){
+ $center = $this->possibleCenters[$index];
+ // Look for about the same center and module size:
+ if($center->aboutEquals($estimatedModuleSize, $centerI, $centerJ)){
+ $this->possibleCenters[$index] = $center->combineEstimate($centerI, $centerJ, $estimatedModuleSize);
+ $found = true;
+ break;
+ }
+ }
+
+ if(!$found){
+ $point = new FinderPattern($centerJ, $centerI, $estimatedModuleSize);
+ $this->possibleCenters[] = $point;
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @return int number of rows we could safely skip during scanning, based on the first
+ * two finder patterns that have been located. In some cases their position will
+ * allow us to infer that the third pattern must lie below a certain point farther
+ * down in the image.
+ */
+ private function findRowSkip():int{
+ $max = count($this->possibleCenters);
+
+ if($max <= 1){
+ return 0;
+ }
+
+ $firstConfirmedCenter = null;
+
+ foreach($this->possibleCenters as $center){
+
+ if($center->getCount() >= self::CENTER_QUORUM){
+
+ if($firstConfirmedCenter === null){
+ $firstConfirmedCenter = $center;
+ }
+ else{
+ // We have two confirmed centers
+ // How far down can we skip before resuming looking for the next
+ // pattern? In the worst case, only the difference between the
+ // difference in the x / y coordinates of the two centers.
+ // This is the case where you find top left last.
+ $this->hasSkipped = true;
+
+ return (int)((abs($firstConfirmedCenter->getX() - $center->getX()) -
+ abs($firstConfirmedCenter->getY() - $center->getY())) / 2);
+ }
+ }
+ }
+
+ return 0;
+ }
+
+ /**
+ * @return bool true if we have found at least 3 finder patterns that have been detected
+ * at least {@link #CENTER_QUORUM} times each, and, the estimated module size of the
+ * candidates is "pretty similar"
+ */
+ private function haveMultiplyConfirmedCenters():bool{
+ $confirmedCount = 0;
+ $totalModuleSize = 0.0;
+ $max = count($this->possibleCenters);
+
+ foreach($this->possibleCenters as $pattern){
+ if($pattern->getCount() >= self::CENTER_QUORUM){
+ $confirmedCount++;
+ $totalModuleSize += $pattern->getEstimatedModuleSize();
+ }
+ }
+
+ if($confirmedCount < 3){
+ return false;
+ }
+ // OK, we have at least 3 confirmed centers, but, it's possible that one is a "false positive"
+ // and that we need to keep looking. We detect this by asking if the estimated module sizes
+ // vary too much. We arbitrarily say that when the total deviation from average exceeds
+ // 5% of the total module size estimates, it's too much.
+ $average = $totalModuleSize / (float)$max;
+ $totalDeviation = 0.0;
+
+ foreach($this->possibleCenters as $pattern){
+ $totalDeviation += abs($pattern->getEstimatedModuleSize() - $average);
+ }
+
+ return $totalDeviation <= 0.05 * $totalModuleSize;
+ }
+
+ /**
+ * @return \chillerlan\QRCode\Detector\FinderPattern[] the 3 best {@link FinderPattern}s from our list of candidates. The "best" are
+ * those that have been detected at least {@link #CENTER_QUORUM} times, and whose module
+ * size differs from the average among those patterns the least
+ * @throws \RuntimeException if 3 such finder patterns do not exist
+ */
+ private function selectBestPatterns():array{
+ $startSize = count($this->possibleCenters);
+
+ if($startSize < 3){
+ throw new RuntimeException('could not find enough finder patterns');
+ }
+
+ usort(
+ $this->possibleCenters,
+ fn(FinderPattern $a, FinderPattern $b) => $a->getEstimatedModuleSize() <=> $b->getEstimatedModuleSize()
+ );
+
+ $distortion = PHP_FLOAT_MAX;
+ $bestPatterns = [];
+
+ for($i = 0; $i < $startSize - 2; $i++){
+ $fpi = $this->possibleCenters[$i];
+ $minModuleSize = $fpi->getEstimatedModuleSize();
+
+ for($j = $i + 1; $j < $startSize - 1; $j++){
+ $fpj = $this->possibleCenters[$j];
+ $squares0 = $fpi->getSquaredDistance($fpj);
+
+ for($k = $j + 1; $k < $startSize; $k++){
+ $fpk = $this->possibleCenters[$k];
+ $maxModuleSize = $fpk->getEstimatedModuleSize();
+
+ // module size is not similar
+ if($maxModuleSize > $minModuleSize * 1.4){
+ continue;
+ }
+
+ $a = $squares0;
+ $b = $fpj->getSquaredDistance($fpk);
+ $c = $fpi->getSquaredDistance($fpk);
+
+ // sorts ascending - inlined
+ if($a < $b){
+ if($b > $c){
+ if($a < $c){
+ $temp = $b;
+ $b = $c;
+ $c = $temp;
+ }
+ else{
+ $temp = $a;
+ $a = $c;
+ $c = $b;
+ $b = $temp;
+ }
+ }
+ }
+ else{
+ if($b < $c){
+ if($a < $c){
+ $temp = $a;
+ $a = $b;
+ $b = $temp;
+ }
+ else{
+ $temp = $a;
+ $a = $b;
+ $b = $c;
+ $c = $temp;
+ }
+ }
+ else{
+ $temp = $a;
+ $a = $c;
+ $c = $temp;
+ }
+ }
+
+ // a^2 + b^2 = c^2 (Pythagorean theorem), and a = b (isosceles triangle).
+ // Since any right triangle satisfies the formula c^2 - b^2 - a^2 = 0,
+ // we need to check both two equal sides separately.
+ // The value of |c^2 - 2 * b^2| + |c^2 - 2 * a^2| increases as dissimilarity
+ // from isosceles right triangle.
+ $d = abs($c - 2 * $b) + abs($c - 2 * $a);
+
+ if($d < $distortion){
+ $distortion = $d;
+ $bestPatterns = [$fpi, $fpj, $fpk];
+ }
+ }
+ }
+ }
+
+ if($distortion === PHP_FLOAT_MAX){
+ throw new RuntimeException('finder patterns may be too distorted');
+ }
+
+ return $bestPatterns;
+ }
+
+ /**
+ * Orders an array of three ResultPoints in an order [A,B,C] such that AB is less than AC
+ * and BC is less than AC, and the angle between BC and BA is less than 180 degrees.
+ *
+ * @param \chillerlan\QRCode\Detector\FinderPattern[] $patterns array of three FinderPattern to order
+ *
+ * @return \chillerlan\QRCode\Detector\FinderPattern[]
+ */
+ private function orderBestPatterns(array $patterns):array{
+
+ // Find distances between pattern centers
+ $zeroOneDistance = $patterns[0]->getDistance($patterns[1]);
+ $oneTwoDistance = $patterns[1]->getDistance($patterns[2]);
+ $zeroTwoDistance = $patterns[0]->getDistance($patterns[2]);
+
+ // Assume one closest to other two is B; A and C will just be guesses at first
+ if($oneTwoDistance >= $zeroOneDistance && $oneTwoDistance >= $zeroTwoDistance){
+ [$pointB, $pointA, $pointC] = $patterns;
+ }
+ elseif($zeroTwoDistance >= $oneTwoDistance && $zeroTwoDistance >= $zeroOneDistance){
+ [$pointA, $pointB, $pointC] = $patterns;
+ }
+ else{
+ [$pointA, $pointC, $pointB] = $patterns;
+ }
+
+ // Use cross product to figure out whether A and C are correct or flipped.
+ // This asks whether BC x BA has a positive z component, which is the arrangement
+ // we want for A, B, C. If it's negative, then we've got it flipped around and
+ // should swap A and C.
+ if($this->crossProductZ($pointA, $pointB, $pointC) < 0.0){
+ $temp = $pointA;
+ $pointA = $pointC;
+ $pointC = $temp;
+ }
+
+ return [$pointA, $pointB, $pointC];
+ }
+
+ /**
+ * Returns the z component of the cross product between vectors BC and BA.
+ */
+ private function crossProductZ(FinderPattern $pointA, FinderPattern $pointB, FinderPattern $pointC):float{
+ $bX = $pointB->getX();
+ $bY = $pointB->getY();
+
+ return (($pointC->getX() - $bX) * ($pointA->getY() - $bY)) - (($pointC->getY() - $bY) * ($pointA->getX() - $bX));
+ }
+
+}
diff --git a/src/Detector/GridSampler.php b/src/Detector/GridSampler.php
new file mode 100644
index 000000000..2f252c9f9
--- /dev/null
+++ b/src/Detector/GridSampler.php
@@ -0,0 +1,171 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Detector;
+
+use Exception, RuntimeException;
+use chillerlan\QRCode\Decoder\BitMatrix;
+use function array_fill, count, sprintf;
+
+/**
+ * Implementations of this class can, given locations of finder patterns for a QR code in an
+ * image, sample the right points in the image to reconstruct the QR code, accounting for
+ * perspective distortion. It is abstracted since it is relatively expensive and should be allowed
+ * to take advantage of platform-specific optimized implementations, like Sun's Java Advanced
+ * Imaging library, but which may not be available in other environments such as J2ME, and vice
+ * versa.
+ *
+ * The implementation used can be controlled by calling {@link #setGridSampler(GridSampler)}
+ * with an instance of a class which implements this interface.
+ *
+ * @author Sean Owen
+ */
+final class GridSampler{
+
+ /**
+ *
Checks a set of points that have been transformed to sample points on an image against
+ * the image's dimensions to see if the point are even within the image.
+ *
+ * This method will actually "nudge" the endpoints back onto the image if they are found to be
+ * barely (less than 1 pixel) off the image. This accounts for imperfect detection of finder
+ * patterns in an image where the QR Code runs all the way to the image border.
+ *
+ * For efficiency, the method will check points from either end of the line until one is found
+ * to be within the image. Because the set of points are assumed to be linear, this is valid.
+ *
+ * @param \chillerlan\QRCode\Decoder\BitMatrix $bitMatrix image into which the points should map
+ * @param float[] $points actual points in x1,y1,...,xn,yn form
+ *
+ * @throws \RuntimeException if an endpoint is lies outside the image boundaries
+ */
+ private function checkAndNudgePoints(BitMatrix $bitMatrix, array $points):void{
+ $dimension = $bitMatrix->getDimension();
+ $nudged = true;
+ $max = count($points);
+
+ // Check and nudge points from start until we see some that are OK:
+ for($offset = 0; $offset < $max && $nudged; $offset += 2){
+ $x = (int)$points[$offset];
+ $y = (int)$points[$offset + 1];
+
+ if($x < -1 || $x > $dimension || $y < -1 || $y > $dimension){
+ throw new RuntimeException(sprintf('checkAndNudgePoints 1, x: %s, y: %s, d: %s', $x, $y, $dimension));
+ }
+
+ $nudged = false;
+
+ if($x === -1){
+ $points[$offset] = 0.0;
+ $nudged = true;
+ }
+ elseif($x === $dimension){
+ $points[$offset] = $dimension - 1;
+ $nudged = true;
+ }
+ if($y === -1){
+ $points[$offset + 1] = 0.0;
+ $nudged = true;
+ }
+ elseif($y === $dimension){
+ $points[$offset + 1] = $dimension - 1;
+ $nudged = true;
+ }
+ }
+ // Check and nudge points from end:
+ $nudged = true;
+
+ for($offset = count($points) - 2; $offset >= 0 && $nudged; $offset -= 2){
+ $x = (int)$points[$offset];
+ $y = (int)$points[$offset + 1];
+
+ if($x < -1 || $x > $dimension || $y < -1 || $y > $dimension){
+ throw new RuntimeException(sprintf('checkAndNudgePoints 2, x: %s, y: %s, d: %s', $x, $y, $dimension));
+ }
+
+ $nudged = false;
+
+ if($x === -1){
+ $points[$offset] = 0.0;
+ $nudged = true;
+ }
+ elseif($x === $dimension){
+ $points[$offset] = $dimension - 1;
+ $nudged = true;
+ }
+ if($y === -1){
+ $points[$offset + 1] = 0.0;
+ $nudged = true;
+ }
+ elseif($y === $dimension){
+ $points[$offset + 1] = $dimension - 1;
+ $nudged = true;
+ }
+ }
+ }
+
+ /**
+ * Samples an image for a rectangular matrix of bits of the given dimension. The sampling
+ * transformation is determined by the coordinates of 4 points, in the original and transformed
+ * image space.
+ *
+ * @return \chillerlan\QRCode\Decoder\BitMatrix representing a grid of points sampled from the image within a region
+ * defined by the "from" parameters
+ * @throws \RuntimeException if image can't be sampled, for example, if the transformation defined
+ * by the given points is invalid or results in sampling outside the image boundaries
+ */
+ public function sampleGrid(BitMatrix $image, int $dimension, PerspectiveTransform $transform):BitMatrix{
+
+ if($dimension <= 0){
+ throw new RuntimeException('invalid matrix size');
+ }
+
+ $bits = new BitMatrix($dimension);
+ $points = array_fill(0, 2 * $dimension, 0.0);
+
+ for($y = 0; $y < $dimension; $y++){
+ $max = count($points);
+ $iValue = $y + 0.5;
+
+ for($x = 0; $x < $max; $x += 2){
+ $points[$x] = ($x / 2) + 0.5;
+ $points[$x + 1] = $iValue;
+ }
+
+ $transform->transformPoints($points);
+ // Quick check to see if points transformed to something inside the image;
+ // sufficient to check the endpoints
+ $this->checkAndNudgePoints($image, $points);
+
+ try{
+ for($x = 0; $x < $max; $x += 2){
+ if($image->get((int)$points[$x], (int)$points[$x + 1])){
+ // Black(-ish) pixel
+ $bits->set($x / 2, $y);
+ }
+ }
+ }
+ catch(Exception $aioobe){//ArrayIndexOutOfBoundsException
+ // This feels wrong, but, sometimes if the finder patterns are misidentified, the resulting
+ // transform gets "twisted" such that it maps a straight line of points to a set of points
+ // whose endpoints are in bounds, but others are not. There is probably some mathematical
+ // way to detect this about the transformation that I don't know yet.
+ // This results in an ugly runtime exception despite our clever checks above -- can't have
+ // that. We could check each point's coordinates but that feels duplicative. We settle for
+ // catching and wrapping ArrayIndexOutOfBoundsException.
+ throw new RuntimeException('ArrayIndexOutOfBoundsException');
+ }
+
+ }
+
+ return $bits;
+ }
+
+}
diff --git a/src/Detector/PerspectiveTransform.php b/src/Detector/PerspectiveTransform.php
new file mode 100644
index 000000000..87c93d7c6
--- /dev/null
+++ b/src/Detector/PerspectiveTransform.php
@@ -0,0 +1,174 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Detector;
+
+use function count;
+
+/**
+ * This class implements a perspective transform in two dimensions. Given four source and four
+ * destination points, it will compute the transformation implied between them. The code is based
+ * directly upon section 3.4.2 of George Wolberg's "Digital Image Warping"; see pages 54-56.
+ *
+ * @author Sean Owen
+ */
+final class PerspectiveTransform{
+
+ private float $a11;
+ private float $a12;
+ private float $a13;
+ private float $a21;
+ private float $a22;
+ private float $a23;
+ private float $a31;
+ private float $a32;
+ private float $a33;
+
+ /**
+ *
+ */
+ private function set(
+ float $a11, float $a21, float $a31,
+ float $a12, float $a22, float $a32,
+ float $a13, float $a23, float $a33
+ ):self{
+ $this->a11 = $a11;
+ $this->a12 = $a12;
+ $this->a13 = $a13;
+ $this->a21 = $a21;
+ $this->a22 = $a22;
+ $this->a23 = $a23;
+ $this->a31 = $a31;
+ $this->a32 = $a32;
+ $this->a33 = $a33;
+
+ return $this;
+ }
+
+ /**
+ *
+ */
+ public function quadrilateralToQuadrilateral(
+ float $x0, float $y0, float $x1, float $y1, float $x2, float $y2, float $x3, float $y3,
+ float $x0p, float $y0p, float $x1p, float $y1p, float $x2p, float $y2p, float $x3p, float $y3p
+ ):self{
+ return (new self)
+ ->squareToQuadrilateral($x0p, $y0p, $x1p, $y1p, $x2p, $y2p, $x3p, $y3p)
+ ->times($this->quadrilateralToSquare($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3));
+ }
+
+ /**
+ *
+ */
+ private function quadrilateralToSquare(
+ float $x0, float $y0, float $x1, float $y1,
+ float $x2, float $y2, float $x3, float $y3
+ ):self{
+ // Here, the adjoint serves as the inverse:
+ return $this
+ ->squareToQuadrilateral($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3)
+ ->buildAdjoint();
+ }
+
+ /**
+ *
+ */
+ private function buildAdjoint():self{
+ // Adjoint is the transpose of the cofactor matrix:
+ return $this->set(
+ $this->a22 * $this->a33 - $this->a23 * $this->a32,
+ $this->a23 * $this->a31 - $this->a21 * $this->a33,
+ $this->a21 * $this->a32 - $this->a22 * $this->a31,
+ $this->a13 * $this->a32 - $this->a12 * $this->a33,
+ $this->a11 * $this->a33 - $this->a13 * $this->a31,
+ $this->a12 * $this->a31 - $this->a11 * $this->a32,
+ $this->a12 * $this->a23 - $this->a13 * $this->a22,
+ $this->a13 * $this->a21 - $this->a11 * $this->a23,
+ $this->a11 * $this->a22 - $this->a12 * $this->a21
+ );
+ }
+
+ /**
+ *
+ */
+ private function squareToQuadrilateral(
+ float $x0, float $y0, float $x1, float $y1,
+ float $x2, float $y2, float $x3, float $y3
+ ):self{
+ $dx3 = $x0 - $x1 + $x2 - $x3;
+ $dy3 = $y0 - $y1 + $y2 - $y3;
+
+ if($dx3 === 0.0 && $dy3 === 0.0){
+ // Affine
+ return $this->set($x1 - $x0, $x2 - $x1, $x0, $y1 - $y0, $y2 - $y1, $y0, 0.0, 0.0, 1.0);
+ }
+
+ $dx1 = $x1 - $x2;
+ $dx2 = $x3 - $x2;
+ $dy1 = $y1 - $y2;
+ $dy2 = $y3 - $y2;
+ $denominator = $dx1 * $dy2 - $dx2 * $dy1;
+ $a13 = ($dx3 * $dy2 - $dx2 * $dy3) / $denominator;
+ $a23 = ($dx1 * $dy3 - $dx3 * $dy1) / $denominator;
+
+ return $this->set(
+ $x1 - $x0 + $a13 * $x1, $x3 - $x0 + $a23 * $x3, $x0,
+ $y1 - $y0 + $a13 * $y1, $y3 - $y0 + $a23 * $y3, $y0,
+ $a13, $a23, 1.0
+ );
+ }
+
+ /**
+ *
+ */
+ private function times(PerspectiveTransform $other):self{
+ return $this->set(
+ $this->a11 * $other->a11 + $this->a21 * $other->a12 + $this->a31 * $other->a13,
+ $this->a11 * $other->a21 + $this->a21 * $other->a22 + $this->a31 * $other->a23,
+ $this->a11 * $other->a31 + $this->a21 * $other->a32 + $this->a31 * $other->a33,
+ $this->a12 * $other->a11 + $this->a22 * $other->a12 + $this->a32 * $other->a13,
+ $this->a12 * $other->a21 + $this->a22 * $other->a22 + $this->a32 * $other->a23,
+ $this->a12 * $other->a31 + $this->a22 * $other->a32 + $this->a32 * $other->a33,
+ $this->a13 * $other->a11 + $this->a23 * $other->a12 + $this->a33 * $other->a13,
+ $this->a13 * $other->a21 + $this->a23 * $other->a22 + $this->a33 * $other->a23,
+ $this->a13 * $other->a31 + $this->a23 * $other->a32 + $this->a33 * $other->a33
+ );
+ }
+
+ /**
+ *
+ */
+ public function transformPoints(array &$xValues, array &$yValues = null):void{
+ $max = count($xValues);
+
+ if($yValues !== null){
+
+ for($i = 0; $i < $max; $i++){
+ $x = $xValues[$i];
+ $y = $yValues[$i];
+ $denominator = $this->a13 * $x + $this->a23 * $y + $this->a33;
+ $xValues[$i] = ($this->a11 * $x + $this->a21 * $y + $this->a31) / $denominator;
+ $yValues[$i] = ($this->a12 * $x + $this->a22 * $y + $this->a32) / $denominator;
+ }
+
+ return;
+ }
+
+ for($i = 0; $i < $max; $i += 2){
+ $x = $xValues[$i];
+ $y = $xValues[$i + 1];
+ $denominator = $this->a13 * $x + $this->a23 * $y + $this->a33;
+ $xValues[$i] = ($this->a11 * $x + $this->a21 * $y + $this->a31) / $denominator;
+ $xValues[$i + 1] = ($this->a12 * $x + $this->a22 * $y + $this->a32) / $denominator;
+ }
+ }
+
+}
diff --git a/src/Detector/ResultPoint.php b/src/Detector/ResultPoint.php
new file mode 100644
index 000000000..5cc17116f
--- /dev/null
+++ b/src/Detector/ResultPoint.php
@@ -0,0 +1,73 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ */
+
+namespace chillerlan\QRCode\Detector;
+
+use function abs;
+
+/**
+ * Encapsulates a point of interest in an image containing a barcode. Typically, this
+ * would be the location of a finder pattern or the corner of the barcode, for example.
+ *
+ * @author Sean Owen
+ */
+abstract class ResultPoint{
+
+ protected float $x;
+ protected float $y;
+ protected float $estimatedModuleSize;
+
+ /**
+ *
+ */
+ public function __construct(float $x, float $y, float $estimatedModuleSize){
+ $this->x = $x;
+ $this->y = $y;
+ $this->estimatedModuleSize = $estimatedModuleSize;
+ }
+
+ /**
+ *
+ */
+ public function getX():float{
+ return $this->x;
+ }
+
+ /**
+ *
+ */
+ public function getY():float{
+ return $this->y;
+ }
+
+ /**
+ *
+ */
+ public function getEstimatedModuleSize():float{
+ return $this->estimatedModuleSize;
+ }
+
+ /**
+ * Determines if this finder pattern "about equals" a finder pattern at the stated
+ * position and size -- meaning, it is at nearly the same center with nearly the same size.
+ */
+ public function aboutEquals(float $moduleSize, float $i, float $j):bool{
+
+ if(abs($i - $this->y) <= $moduleSize && abs($j - $this->x) <= $moduleSize){
+ $moduleSizeDiff = abs($moduleSize - $this->estimatedModuleSize);
+
+ return $moduleSizeDiff <= 1.0 || $moduleSizeDiff <= $this->estimatedModuleSize;
+ }
+
+ return false;
+ }
+
+}
diff --git a/src/Output/QRCodeOutputException.php b/src/Output/QRCodeOutputException.php
new file mode 100644
index 000000000..62d971877
--- /dev/null
+++ b/src/Output/QRCodeOutputException.php
@@ -0,0 +1,15 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\QRCodeException;
+
+class QRCodeOutputException extends QRCodeException{}
diff --git a/src/Output/QRFpdf.php b/src/Output/QRFpdf.php
new file mode 100644
index 000000000..4500c0a6e
--- /dev/null
+++ b/src/Output/QRFpdf.php
@@ -0,0 +1,110 @@
+ $defaultValue){
+ $v = $this->options->moduleValues[$M_TYPE] ?? null;
+
+ if(!is_array($v) || count($v) < 3){
+ $this->moduleValues[$M_TYPE] = $defaultValue
+ ? [0, 0, 0]
+ : [255, 255, 255];
+ }
+ else{
+ $this->moduleValues[$M_TYPE] = array_values($v);
+ }
+
+ }
+
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @return string|\FPDF
+ */
+ public function dump(string $file = null){
+ $file ??= $this->options->cachefile;
+
+ $fpdf = new FPDF('P', $this->options->fpdfMeasureUnit, [$this->length, $this->length]);
+ $fpdf->AddPage();
+
+ $prevColor = null;
+
+ foreach($this->matrix->matrix() as $y => $row){
+
+ foreach($row as $x => $M_TYPE){
+ /** @var int $M_TYPE */
+ $color = $this->moduleValues[$M_TYPE];
+
+ if($prevColor === null || $prevColor !== $color){
+ /** @phan-suppress-next-line PhanParamTooFewUnpack */
+ $fpdf->SetFillColor(...$color);
+ $prevColor = $color;
+ }
+
+ $fpdf->Rect($x * $this->scale, $y * $this->scale, 1 * $this->scale, 1 * $this->scale, 'F');
+ }
+
+ }
+
+ if($this->options->returnResource){
+ return $fpdf;
+ }
+
+ $pdfData = $fpdf->Output('S');
+
+ if($file !== null){
+ $this->saveToFile($pdfData, $file);
+ }
+
+ if($this->options->imageBase64){
+ $pdfData = $this->base64encode($pdfData, 'application/pdf');
+ }
+
+ return $pdfData;
+ }
+
+}
diff --git a/src/Output/QRImage.php b/src/Output/QRImage.php
new file mode 100644
index 000000000..e746f127b
--- /dev/null
+++ b/src/Output/QRImage.php
@@ -0,0 +1,213 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\{QRCode, QRCodeException};
+use chillerlan\Settings\SettingsContainerInterface;
+use Exception;
+
+use function array_values, call_user_func, count, extension_loaded, imagecolorallocate, imagecolortransparent,
+ imagecreatetruecolor, imagedestroy, imagefilledrectangle, imagegif, imagejpeg, imagepng, in_array,
+ is_array, ob_end_clean, ob_get_contents, ob_start, range;
+
+/**
+ * Converts the matrix into GD images, raw or base64 output (requires ext-gd)
+ *
+ * @see http://php.net/manual/book.image.php
+ */
+class QRImage extends QROutputAbstract{
+
+ /**
+ * GD image types that support transparency
+ *
+ * @var string[]
+ */
+ protected const TRANSPARENCY_TYPES = [
+ QRCode::OUTPUT_IMAGE_PNG,
+ QRCode::OUTPUT_IMAGE_GIF,
+ ];
+
+ protected string $defaultMode = QRCode::OUTPUT_IMAGE_PNG;
+
+ /**
+ * The GD image resource
+ *
+ * @see imagecreatetruecolor()
+ * @var resource|\GdImage
+ */
+ protected $image;
+
+ /**
+ * @inheritDoc
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ public function __construct(SettingsContainerInterface $options, QRMatrix $matrix){
+
+ if(!extension_loaded('gd')){
+ throw new QRCodeException('ext-gd not loaded'); // @codeCoverageIgnore
+ }
+
+ parent::__construct($options, $matrix);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function setModuleValues():void{
+
+ foreach($this::DEFAULT_MODULE_VALUES as $M_TYPE => $defaultValue){
+ $v = $this->options->moduleValues[$M_TYPE] ?? null;
+
+ if(!is_array($v) || count($v) < 3){
+ $this->moduleValues[$M_TYPE] = $defaultValue
+ ? [0, 0, 0]
+ : [255, 255, 255];
+ }
+ else{
+ $this->moduleValues[$M_TYPE] = array_values($v);
+ }
+
+ }
+
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @return string|resource|\GdImage
+ *
+ * @phan-suppress PhanUndeclaredTypeReturnType, PhanTypeMismatchReturn
+ */
+ public function dump(string $file = null){
+ $file ??= $this->options->cachefile;
+
+ $this->image = imagecreatetruecolor($this->length, $this->length);
+
+ // avoid: Indirect modification of overloaded property $imageTransparencyBG has no effect
+ // https://stackoverflow.com/a/10455217
+ $tbg = $this->options->imageTransparencyBG;
+ /** @phan-suppress-next-line PhanParamTooFewInternalUnpack */
+ $background = imagecolorallocate($this->image, ...$tbg);
+
+ if((bool)$this->options->imageTransparent && in_array($this->options->outputType, $this::TRANSPARENCY_TYPES, true)){
+ imagecolortransparent($this->image, $background);
+ }
+
+ imagefilledrectangle($this->image, 0, 0, $this->length, $this->length, $background);
+
+ foreach($this->matrix->matrix() as $y => $row){
+ foreach($row as $x => $M_TYPE){
+ $this->setPixel($x, $y, $this->moduleValues[$M_TYPE]);
+ }
+ }
+
+ if($this->options->returnResource){
+ return $this->image;
+ }
+
+ $imageData = $this->dumpImage();
+
+ if($file !== null){
+ $this->saveToFile($imageData, $file);
+ }
+
+ if($this->options->imageBase64){
+ $imageData = $this->base64encode($imageData, 'image/'.$this->options->outputType);
+ }
+
+ return $imageData;
+ }
+
+ /**
+ * Creates a single QR pixel with the given settings
+ */
+ protected function setPixel(int $x, int $y, array $rgb):void{
+ imagefilledrectangle(
+ $this->image,
+ $x * $this->scale,
+ $y * $this->scale,
+ ($x + 1) * $this->scale,
+ ($y + 1) * $this->scale,
+ /** @phan-suppress-next-line PhanParamTooFewInternalUnpack */
+ imagecolorallocate($this->image, ...$rgb)
+ );
+ }
+
+ /**
+ * Creates the final image by calling the desired GD output function
+ *
+ * @throws \chillerlan\QRCode\Output\QRCodeOutputException
+ */
+ protected function dumpImage():string{
+ ob_start();
+
+ try{
+ call_user_func([$this, $this->outputMode ?? $this->defaultMode]);
+ }
+ // not going to cover edge cases
+ // @codeCoverageIgnoreStart
+ catch(Exception $e){
+ throw new QRCodeOutputException($e->getMessage());
+ }
+ // @codeCoverageIgnoreEnd
+
+ $imageData = ob_get_contents();
+ imagedestroy($this->image);
+
+ ob_end_clean();
+
+ return $imageData;
+ }
+
+ /**
+ * PNG output
+ *
+ * @return void
+ */
+ protected function png():void{
+ imagepng(
+ $this->image,
+ null,
+ in_array($this->options->pngCompression, range(-1, 9), true)
+ ? $this->options->pngCompression
+ : -1
+ );
+ }
+
+ /**
+ * Jiff - like... JitHub!
+ *
+ * @return void
+ */
+ protected function gif():void{
+ imagegif($this->image);
+ }
+
+ /**
+ * JPG output
+ *
+ * @return void
+ */
+ protected function jpg():void{
+ imagejpeg(
+ $this->image,
+ null,
+ in_array($this->options->jpegQuality, range(0, 100), true)
+ ? $this->options->jpegQuality
+ : 85
+ );
+ }
+
+}
diff --git a/src/Output/QRImagick.php b/src/Output/QRImagick.php
new file mode 100644
index 000000000..d93cb758f
--- /dev/null
+++ b/src/Output/QRImagick.php
@@ -0,0 +1,117 @@
+
+ * @copyright 2018 smiley
+ * @license MIT
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\QRCodeException;
+use chillerlan\Settings\SettingsContainerInterface;
+use Imagick, ImagickDraw, ImagickPixel;
+
+use function extension_loaded, is_string;
+
+/**
+ * ImageMagick output module (requires ext-imagick)
+ *
+ * @see http://php.net/manual/book.imagick.php
+ * @see http://phpimagick.com
+ */
+class QRImagick extends QROutputAbstract{
+
+ protected Imagick $imagick;
+
+ /**
+ * @inheritDoc
+ */
+ public function __construct(SettingsContainerInterface $options, QRMatrix $matrix){
+
+ if(!extension_loaded('imagick')){
+ throw new QRCodeException('ext-imagick not loaded'); // @codeCoverageIgnore
+ }
+
+ parent::__construct($options, $matrix);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function setModuleValues():void{
+
+ foreach($this::DEFAULT_MODULE_VALUES as $type => $defaultValue){
+ $v = $this->options->moduleValues[$type] ?? null;
+
+ if(!is_string($v)){
+ $this->moduleValues[$type] = $defaultValue
+ ? new ImagickPixel($this->options->markupDark)
+ : new ImagickPixel($this->options->markupLight);
+ }
+ else{
+ $this->moduleValues[$type] = new ImagickPixel($v);
+ }
+ }
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @return string|\Imagick
+ */
+ public function dump(string $file = null){
+ $file ??= $this->options->cachefile;
+ $this->imagick = new Imagick;
+
+ $this->imagick->newImage(
+ $this->length,
+ $this->length,
+ new ImagickPixel($this->options->imagickBG ?? 'transparent'),
+ $this->options->imagickFormat
+ );
+
+ $this->drawImage();
+
+ if($this->options->returnResource){
+ return $this->imagick;
+ }
+
+ $imageData = $this->imagick->getImageBlob();
+
+ if($file !== null){
+ $this->saveToFile($imageData, $file);
+ }
+
+ return $imageData;
+ }
+
+ /**
+ * Creates the QR image via ImagickDraw
+ */
+ protected function drawImage():void{
+ $draw = new ImagickDraw;
+
+ foreach($this->matrix->matrix() as $y => $row){
+ foreach($row as $x => $M_TYPE){
+ $draw->setStrokeColor($this->moduleValues[$M_TYPE]);
+ $draw->setFillColor($this->moduleValues[$M_TYPE]);
+ $draw->rectangle(
+ $x * $this->scale,
+ $y * $this->scale,
+ ($x + 1) * $this->scale,
+ ($y + 1) * $this->scale
+ );
+
+ }
+ }
+
+ $this->imagick->drawImage($draw);
+ }
+
+}
diff --git a/src/Output/QRMarkup.php b/src/Output/QRMarkup.php
new file mode 100644
index 000000000..bf79bdcdf
--- /dev/null
+++ b/src/Output/QRMarkup.php
@@ -0,0 +1,158 @@
+
+ * @copyright 2016 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\QRCode;
+
+use function is_string, sprintf, strip_tags, trim;
+
+/**
+ * Converts the matrix into markup types: HTML, SVG, ...
+ */
+class QRMarkup extends QROutputAbstract{
+
+ protected string $defaultMode = QRCode::OUTPUT_MARKUP_SVG;
+
+ /**
+ * @see \sprintf()
+ */
+ protected string $svgHeader = '';
+
+ /**
+ * @inheritDoc
+ */
+ protected function setModuleValues():void{
+
+ foreach($this::DEFAULT_MODULE_VALUES as $M_TYPE => $defaultValue){
+ $v = $this->options->moduleValues[$M_TYPE] ?? null;
+
+ if(!is_string($v)){
+ $this->moduleValues[$M_TYPE] = $defaultValue
+ ? $this->options->markupDark
+ : $this->options->markupLight;
+ }
+ else{
+ $this->moduleValues[$M_TYPE] = trim(strip_tags($v), '\'"');
+ }
+
+ }
+
+ }
+
+ /**
+ * HTML output
+ */
+ protected function html(string $file = null):string{
+
+ $html = empty($this->options->cssClass)
+ ? ''
+ : '
';
+
+ $html .= $this->options->eol;
+
+ foreach($this->matrix->matrix() as $row){
+ $html .= '
';
+
+ foreach($row as $M_TYPE){
+ $html .= ' ';
+ }
+
+ $html .= '
'.$this->options->eol;
+ }
+
+ $html .= '
'.$this->options->eol;
+
+ if($file !== null){
+ return ''.
+ '
QR Code '.
+ ''.$this->options->eol.$html.'';
+ }
+
+ return $html;
+ }
+
+ /**
+ * SVG output
+ *
+ * @see https://github.com/codemasher/php-qrcode/pull/5
+ */
+ protected function svg(string $file = null):string{
+ $matrix = $this->matrix->matrix();
+
+ $svg = sprintf($this->svgHeader, $this->options->cssClass, $this->options->svgViewBoxSize ?? $this->moduleCount)
+ .$this->options->eol
+ .'
'.$this->options->svgDefs.' '
+ .$this->options->eol;
+
+ foreach($this->moduleValues as $M_TYPE => $value){
+ $path = '';
+
+ foreach($matrix as $y => $row){
+ //we'll combine active blocks within a single row as a lightweight compression technique
+ $start = null;
+ $count = 0;
+
+ foreach($row as $x => $module){
+
+ if($module === $M_TYPE){
+ $count++;
+
+ if($start === null){
+ $start = $x;
+ }
+
+ if(isset($row[$x + 1])){
+ continue;
+ }
+ }
+
+ if($count > 0){
+ $len = $count;
+ $start ??= 0; // avoid type coercion in sprintf() - phan happy
+
+ $path .= sprintf('M%s %s h%s v1 h-%sZ ', $start, $y, $len, $len);
+
+ // reset count
+ $count = 0;
+ $start = null;
+ }
+
+ }
+
+ }
+
+ if(!empty($path)){
+ $svg .= sprintf(
+ '
',
+ $M_TYPE, $this->options->cssClass, $value, $this->options->svgOpacity, $path
+ );
+ }
+
+ }
+
+ // close svg
+ $svg .= ''.$this->options->eol;
+
+ // if saving to file, append the correct headers
+ if($file !== null){
+ return ''.
+ $this->options->eol.$svg;
+ }
+
+ if($this->options->imageBase64){
+ $svg = $this->base64encode($svg, 'image/svg+xml');
+ }
+
+ return $svg;
+ }
+
+}
diff --git a/src/Output/QROutputAbstract.php b/src/Output/QROutputAbstract.php
new file mode 100644
index 000000000..0c384e6d6
--- /dev/null
+++ b/src/Output/QROutputAbstract.php
@@ -0,0 +1,135 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\{Data\QRMatrix, QRCode};
+use chillerlan\Settings\SettingsContainerInterface;
+use function base64_encode, call_user_func_array, dirname, file_put_contents, get_called_class, in_array, is_writable, sprintf;
+
+/**
+ * common output abstract
+ */
+abstract class QROutputAbstract implements QROutputInterface{
+
+ /**
+ * the current size of the QR matrix
+ *
+ * @see \chillerlan\QRCode\Data\QRMatrix::size()
+ */
+ protected int $moduleCount;
+
+ /**
+ * the current output mode
+ *
+ * @see \chillerlan\QRCode\QROptions::$outputType
+ */
+ protected string $outputMode;
+
+ /**
+ * the default output mode of the current output module
+ */
+ protected string $defaultMode;
+
+ /**
+ * the current scaling for a QR pixel
+ *
+ * @see \chillerlan\QRCode\QROptions::$scale
+ */
+ protected int $scale;
+
+ /**
+ * the side length of the QR image (modules * scale)
+ */
+ protected int $length;
+
+ /**
+ * an (optional) array of color values for the several QR matrix parts
+ */
+ protected array $moduleValues;
+
+ /**
+ * the (filled) data matrix object
+ */
+ protected QRMatrix $matrix;
+
+ /**
+ * @var \chillerlan\Settings\SettingsContainerInterface|\chillerlan\QRCode\QROptions
+ */
+ protected SettingsContainerInterface $options;
+
+ /**
+ * QROutputAbstract constructor.
+ */
+ public function __construct(SettingsContainerInterface $options, QRMatrix $matrix){
+ $this->options = $options;
+ $this->matrix = $matrix;
+ $this->moduleCount = $this->matrix->size();
+ $this->scale = $this->options->scale;
+ $this->length = $this->moduleCount * $this->scale;
+
+ $class = get_called_class();
+
+ if(isset(QRCode::OUTPUT_MODES[$class]) && in_array($this->options->outputType, QRCode::OUTPUT_MODES[$class])){
+ $this->outputMode = $this->options->outputType;
+ }
+
+ $this->setModuleValues();
+ }
+
+ /**
+ * Sets the initial module values (clean-up & defaults)
+ */
+ abstract protected function setModuleValues():void;
+
+ /**
+ * Returns a base64 data URI for the given string and mime type
+ */
+ protected function base64encode(string $data, string $mime):string{
+ return sprintf('data:%s;base64,%s', $mime, base64_encode($data));
+ }
+
+ /**
+ * saves the qr data to a file
+ *
+ * @see file_put_contents()
+ * @see \chillerlan\QRCode\QROptions::cachefile
+ *
+ * @throws \chillerlan\QRCode\Output\QRCodeOutputException
+ */
+ protected function saveToFile(string $data, string $file):bool{
+
+ if(!is_writable(dirname($file))){
+ throw new QRCodeOutputException(sprintf('Could not write data to cache file: %s', $file));
+ }
+
+ return (bool)file_put_contents($file, $data);
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @return mixed
+ */
+ public function dump(string $file = null){
+ $file ??= $this->options->cachefile;
+
+ // call the built-in output method with the optional file path as parameter
+ // to make the called method aware if a cache file was given
+ $data = call_user_func_array([$this, $this->outputMode ?? $this->defaultMode], [$file]);
+
+ if($file !== null){
+ $this->saveToFile($data, $file);
+ }
+
+ return $data;
+ }
+
+}
diff --git a/src/Output/QROutputInterface.php b/src/Output/QROutputInterface.php
new file mode 100644
index 000000000..32b1bf6e8
--- /dev/null
+++ b/src/Output/QROutputInterface.php
@@ -0,0 +1,52 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\Data\QRMatrix;
+
+/**
+ * Converts the data matrix into readable output
+ */
+interface QROutputInterface{
+
+ const DEFAULT_MODULE_VALUES = [
+ // light
+ QRMatrix::M_NULL => false,
+ QRMatrix::M_DATA => false,
+ QRMatrix::M_FINDER => false,
+ QRMatrix::M_SEPARATOR => false,
+ QRMatrix::M_ALIGNMENT => false,
+ QRMatrix::M_TIMING => false,
+ QRMatrix::M_FORMAT => false,
+ QRMatrix::M_VERSION => false,
+ QRMatrix::M_QUIETZONE => false,
+ QRMatrix::M_LOGO => false,
+ QRMatrix::M_TEST => false,
+ // dark
+ QRMatrix::M_DARKMODULE | QRMatrix::IS_DARK => true,
+ QRMatrix::M_DATA | QRMatrix::IS_DARK => true,
+ QRMatrix::M_FINDER | QRMatrix::IS_DARK => true,
+ QRMatrix::M_ALIGNMENT | QRMatrix::IS_DARK => true,
+ QRMatrix::M_TIMING | QRMatrix::IS_DARK => true,
+ QRMatrix::M_FORMAT | QRMatrix::IS_DARK => true,
+ QRMatrix::M_VERSION | QRMatrix::IS_DARK => true,
+ QRMatrix::M_FINDER_DOT | QRMatrix::IS_DARK => true,
+ QRMatrix::M_TEST | QRMatrix::IS_DARK => true,
+ ];
+
+ /**
+ * generates the output, optionally dumps it to a file, and returns it
+ *
+ * @return mixed
+ */
+ public function dump(string $file = null);
+
+}
diff --git a/src/Output/QRString.php b/src/Output/QRString.php
new file mode 100644
index 000000000..a5dbcf8d8
--- /dev/null
+++ b/src/Output/QRString.php
@@ -0,0 +1,74 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ *
+ * @noinspection PhpUnusedParameterInspection
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\QRCode;
+
+use function implode, is_string, json_encode;
+
+/**
+ * Converts the matrix data into string types
+ */
+class QRString extends QROutputAbstract{
+
+ protected string $defaultMode = QRCode::OUTPUT_STRING_TEXT;
+
+ /**
+ * @inheritDoc
+ */
+ protected function setModuleValues():void{
+
+ foreach($this::DEFAULT_MODULE_VALUES as $M_TYPE => $defaultValue){
+ $v = $this->options->moduleValues[$M_TYPE] ?? null;
+
+ if(!is_string($v)){
+ $this->moduleValues[$M_TYPE] = $defaultValue
+ ? $this->options->textDark
+ : $this->options->textLight;
+ }
+ else{
+ $this->moduleValues[$M_TYPE] = $v;
+ }
+
+ }
+
+ }
+
+ /**
+ * string output
+ */
+ protected function text(string $file = null):string{
+ $str = [];
+
+ foreach($this->matrix->matrix() as $row){
+ $r = [];
+
+ foreach($row as $M_TYPE){
+ $r[] = $this->moduleValues[$M_TYPE];
+ }
+
+ $str[] = implode('', $r);
+ }
+
+ return implode($this->options->eol, $str);
+ }
+
+ /**
+ * JSON output
+ */
+ protected function json(string $file = null):string{
+ return json_encode($this->matrix->matrix());
+ }
+
+}
diff --git a/src/QRCode.php b/src/QRCode.php
new file mode 100755
index 000000000..f5e023d08
--- /dev/null
+++ b/src/QRCode.php
@@ -0,0 +1,308 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode;
+
+use chillerlan\QRCode\Common\{ECICharset, MaskPattern, MaskPatternTester, Mode};
+use chillerlan\QRCode\Data\{AlphaNum, Byte, ECI, Kanji, Number, QRData, QRCodeDataException, QRDataModeInterface, QRMatrix};
+use chillerlan\QRCode\Output\{QRCodeOutputException, QRFpdf, QRImage, QRImagick, QRMarkup, QROutputInterface, QRString};
+use chillerlan\Settings\SettingsContainerInterface;
+use function class_exists, class_implements, in_array, mb_convert_encoding, mb_detect_encoding;
+
+/**
+ * Turns a text string into a Model 2 QR Code
+ *
+ * @see https://github.com/kazuhikoarase/qrcode-generator/tree/master/php
+ * @see http://www.qrcode.com/en/codes/model12.html
+ * @see https://www.swisseduc.ch/informatik/theoretische_informatik/qr_codes/docs/qr_standard.pdf
+ * @see https://en.wikipedia.org/wiki/QR_code
+ * @see http://www.thonky.com/qr-code-tutorial/
+ */
+class QRCode{
+
+ /** @var int */
+ public const VERSION_AUTO = -1;
+ /** @var int */
+ public const MASK_PATTERN_AUTO = -1;
+
+ /** @var string */
+ public const OUTPUT_MARKUP_HTML = 'html';
+ /** @var string */
+ public const OUTPUT_MARKUP_SVG = 'svg';
+ /** @var string */
+ public const OUTPUT_IMAGE_PNG = 'png';
+ /** @var string */
+ public const OUTPUT_IMAGE_JPG = 'jpg';
+ /** @var string */
+ public const OUTPUT_IMAGE_GIF = 'gif';
+ /** @var string */
+ public const OUTPUT_STRING_JSON = 'json';
+ /** @var string */
+ public const OUTPUT_STRING_TEXT = 'text';
+ /** @var string */
+ public const OUTPUT_IMAGICK = 'imagick';
+ /** @var string */
+ public const OUTPUT_FPDF = 'fpdf';
+ /** @var string */
+ public const OUTPUT_CUSTOM = 'custom';
+
+ /**
+ * Map of built-in output modules => capabilities
+ *
+ * @var string[][]
+ */
+ public const OUTPUT_MODES = [
+ QRMarkup::class => [
+ self::OUTPUT_MARKUP_SVG,
+ self::OUTPUT_MARKUP_HTML,
+ ],
+ QRImage::class => [
+ self::OUTPUT_IMAGE_PNG,
+ self::OUTPUT_IMAGE_GIF,
+ self::OUTPUT_IMAGE_JPG,
+ ],
+ QRString::class => [
+ self::OUTPUT_STRING_JSON,
+ self::OUTPUT_STRING_TEXT,
+ ],
+ QRImagick::class => [
+ self::OUTPUT_IMAGICK,
+ ],
+ QRFpdf::class => [
+ self::OUTPUT_FPDF,
+ ],
+ ];
+
+ /**
+ * A collection of one or more data segments of [classname, data] to write
+ *
+ * @see \chillerlan\QRCode\Data\QRDataModeInterface
+ *
+ * @var \chillerlan\QRCode\Data\QRDataModeInterface[]
+ */
+ protected array $dataSegments = [];
+
+ /**
+ * The settings container
+ *
+ * @var \chillerlan\QRCode\QROptions|\chillerlan\Settings\SettingsContainerInterface
+ */
+ protected SettingsContainerInterface $options;
+
+ /**
+ * The selected data interface (Number, AlphaNum, Kanji, Byte)
+ */
+ protected QRData $dataInterface;
+
+ /**
+ * QRCode constructor.
+ *
+ * Sets the options instance
+ */
+ public function __construct(SettingsContainerInterface $options = null){
+ $this->options = $options ?? new QROptions;
+ }
+
+ /**
+ * Renders a QR Code for the given $data and QROptions
+ *
+ * @return mixed
+ */
+ public function render(string $data = null, string $file = null){
+
+ if($data !== null){
+ /** @var \chillerlan\QRCode\Data\QRDataModeInterface $dataInterface */
+ foreach(Mode::DATA_INTERFACES as $dataInterface){
+
+ if($dataInterface::validateString($data)){
+ $this->addSegment(new $dataInterface($data));
+
+ break;
+ }
+
+ }
+
+ }
+
+ return $this->initOutputInterface()->dump($file);
+ }
+
+ /**
+ * Returns a QRMatrix object for the given $data and current QROptions
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public function getMatrix():QRMatrix{
+
+ if(empty($this->dataSegments)){
+ throw new QRCodeDataException('QRCode::getMatrix() No data given.');
+ }
+
+ $this->dataInterface = new QRData($this->options, $this->dataSegments);
+
+ $maskPattern = $this->options->maskPattern === $this::MASK_PATTERN_AUTO
+ ? (new MaskPatternTester($this->dataInterface))->getBestMaskPattern()
+ : new MaskPattern($this->options->maskPattern);
+
+ $matrix = $this->dataInterface->writeMatrix($maskPattern);
+
+ if($this->options->addQuietzone){
+ $matrix->setQuietZone($this->options->quietzoneSize);
+ }
+
+ return $matrix;
+ }
+
+ /**
+ * returns a fresh (built-in) QROutputInterface
+ *
+ * @throws \chillerlan\QRCode\Output\QRCodeOutputException
+ */
+ protected function initOutputInterface():QROutputInterface{
+
+ if($this->options->outputType === $this::OUTPUT_CUSTOM){
+ return $this->initCustomOutputInterface();
+ }
+
+ foreach($this::OUTPUT_MODES as $outputInterface => $modes){
+
+ if(in_array($this->options->outputType, $modes)){
+ return new $outputInterface($this->options, $this->getMatrix());
+ }
+
+ }
+
+ throw new QRCodeOutputException('invalid output type');
+ }
+
+ /**
+ * initializes a custom output module after checking the existence of the class and if it implemnts the required interface
+ *
+ * @throws \chillerlan\QRCode\Output\QRCodeOutputException
+ */
+ protected function initCustomOutputInterface():QROutputInterface{
+
+ if(!class_exists($this->options->outputInterface)){
+ throw new QRCodeOutputException('invalid custom output module');
+ }
+
+ if(!in_array(QROutputInterface::class, class_implements($this->options->outputInterface))){
+ throw new QRCodeOutputException('custom output module does not implement QROutputInterface');
+ }
+
+ /** @phan-suppress-next-line PhanTypeExpectedObjectOrClassName */
+ return new $this->options->outputInterface($this->options, $this->getMatrix());
+ }
+
+ /**
+ * checks if a string qualifies as numeric (convenience method)
+ */
+ public function isNumber(string $string):bool{
+ return Number::validateString($string);
+ }
+
+ /**
+ * checks if a string qualifies as alphanumeric (convenience method)
+ */
+ public function isAlphaNum(string $string):bool{
+ return AlphaNum::validateString($string);
+ }
+
+ /**
+ * checks if a string qualifies as Kanji (convenience method)
+ */
+ public function isKanji(string $string):bool{
+ return Kanji::validateString($string);
+ }
+
+ /**
+ * a dummy (convenience method)
+ */
+ public function isByte(string $string):bool{
+ return Byte::validateString($string);
+ }
+
+ /**
+ * ISO/IEC 18004:2000 8.3.6 - Mixing modes
+ * ISO/IEC 18004:2000 Annex H - Optimisation of bit stream length
+ */
+ protected function addSegment(QRDataModeInterface $segment):void{
+ $this->dataSegments[] = $segment;
+ }
+
+ /**
+ * ISO/IEC 18004:2000 8.3.2 - Numeric Mode
+ */
+ public function addNumberSegment(string $data):self{
+ $this->addSegment(new Number($data));
+
+ return $this;
+ }
+
+ /**
+ * ISO/IEC 18004:2000 8.3.3 - Alphanumeric Mode
+ */
+ public function addAlphaNumSegment(string $data):self{
+ $this->addSegment(new AlphaNum($data));
+
+ return $this;
+ }
+
+ /**
+ * ISO/IEC 18004:2000 8.3.5 - Kanji Mode
+ */
+ public function addKanjiSegment(string $data):self{
+ $this->addSegment(new Kanji($data));
+
+ return $this;
+ }
+
+ /**
+ * ISO/IEC 18004:2000 8.3.4 - 8-bit Byte Mode
+ */
+ public function addByteSegment(string $data):self{
+ $this->addSegment(new Byte($data));
+
+ return $this;
+ }
+
+ /**
+ * ISO/IEC 18004:2000 8.3.1 - Extended Channel Interpretation (ECI) Mode
+ */
+ public function addEciDesignator(int $encoding):self{
+ $this->addSegment(new ECI($encoding));
+
+ return $this;
+ }
+
+ /**
+ * i hate this somehow but i'll leave it for now
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ public function addEciSegment(int $encoding, string $data):self{
+ // validate the encoding id
+ $eciCharset = new ECICharset($encoding);
+ // get charset name
+ $eciCharsetName = $eciCharset->getName();
+ // convert the string to the given charset
+ if($eciCharsetName !== null){
+ $data = mb_convert_encoding($data, $eciCharsetName, mb_detect_encoding($data));
+ // add ECI designator
+ $this->addSegment(new ECI($eciCharset->getID()));
+ $this->addSegment(new Byte($data));
+
+ return $this;
+ }
+
+ throw new QRCodeException('unable to add ECI segment');
+ }
+
+}
diff --git a/src/QRCodeException.php b/src/QRCodeException.php
new file mode 100644
index 000000000..b20836ca2
--- /dev/null
+++ b/src/QRCodeException.php
@@ -0,0 +1,18 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode;
+
+use Exception;
+
+/**
+ * An exception container
+ */
+class QRCodeException extends Exception{}
diff --git a/src/QRCodeReader.php b/src/QRCodeReader.php
new file mode 100644
index 000000000..41e5f323f
--- /dev/null
+++ b/src/QRCodeReader.php
@@ -0,0 +1,99 @@
+
+ * @copyright 2021 Smiley
+ * @license Apache-2.0
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCode;
+
+use chillerlan\Settings\SettingsContainerInterface;
+use Imagick, InvalidArgumentException;
+use chillerlan\QRCode\Decoder\{Decoder, DecoderResult, GDLuminanceSource, IMagickLuminanceSource};
+use function extension_loaded, file_exists, file_get_contents, imagecreatefromstring, is_file, is_readable;
+
+/**
+ *
+ */
+final class QRCodeReader{
+
+ /**
+ * The settings container
+ *
+ * @var \chillerlan\QRCode\QROptions|\chillerlan\Settings\SettingsContainerInterface
+ */
+ private SettingsContainerInterface $options;
+
+ /**
+ *
+ */
+ public function __construct(SettingsContainerInterface $options = null){
+ $this->options = $options ?? new QROptions;
+ }
+
+ /**
+ * @param \Imagick|\GdImage|resource $im
+ *
+ * @return \chillerlan\QRCode\Decoder\DecoderResult
+ */
+ private function decode($im):DecoderResult{
+
+ $source = $this->options->useImagickIfAvailable
+ ? new IMagickLuminanceSource($im)
+ : new GDLuminanceSource($im);
+
+ return (new Decoder)->decode($source);
+ }
+
+ /**
+ * @param string $imgFilePath
+ *
+ * @return \chillerlan\QRCode\Decoder\DecoderResult
+ */
+ public function readFile(string $imgFilePath):DecoderResult{
+
+ if(!file_exists($imgFilePath) || !is_file($imgFilePath) || !is_readable($imgFilePath)){
+ throw new InvalidArgumentException('invalid file: '.$imgFilePath);
+ }
+
+ $im = $this->options->useImagickIfAvailable
+ ? new Imagick($imgFilePath)
+ : imagecreatefromstring(file_get_contents($imgFilePath));
+
+ return $this->decode($im);
+ }
+
+ /**
+ * @param string $imgBlob
+ *
+ * @return \chillerlan\QRCode\Decoder\DecoderResult
+ */
+ public function readBlob(string $imgBlob):DecoderResult{
+
+ if($this->options->useImagickIfAvailable){
+ $im = new Imagick;
+ $im->readImageBlob($imgBlob);
+ }
+ else{
+ $im = imagecreatefromstring($imgBlob);
+ }
+
+ return $this->decode($im);
+ }
+
+ /**
+ * @param \Imagick|\GdImage|resource $imgSource
+ *
+ * @return \chillerlan\QRCode\Decoder\DecoderResult
+ */
+ public function readResource($imgSource):DecoderResult{
+ return $this->decode($imgSource);
+ }
+
+}
diff --git a/src/QROptions.php b/src/QROptions.php
new file mode 100644
index 000000000..540efc176
--- /dev/null
+++ b/src/QROptions.php
@@ -0,0 +1,52 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode;
+
+use chillerlan\Settings\SettingsContainerAbstract;
+
+/**
+ * The QRCode settings container
+ *
+ * @property int $version
+ * @property int $versionMin
+ * @property int $versionMax
+ * @property int $eccLevel
+ * @property int $maskPattern
+ * @property bool $addQuietzone
+ * @property int $quietzoneSize
+ * @property string $outputType
+ * @property string|null $outputInterface
+ * @property string|null $cachefile
+ * @property string $eol
+ * @property int $scale
+ * @property string $cssClass
+ * @property float $svgOpacity
+ * @property string $svgDefs
+ * @property int $svgViewBoxSize
+ * @property string $textDark
+ * @property string $textLight
+ * @property string $markupDark
+ * @property string $markupLight
+ * @property bool $returnResource
+ * @property bool $imageBase64
+ * @property bool $imageTransparent
+ * @property array $imageTransparencyBG
+ * @property int $pngCompression
+ * @property int $jpegQuality
+ * @property string $imagickFormat
+ * @property string|null $imagickBG
+ * @property string $fpdfMeasureUnit
+ * @property array|null $moduleValues
+ * @property bool $useImagickIfAvailable
+ */
+class QROptions extends SettingsContainerAbstract{
+ use QROptionsTrait;
+}
diff --git a/src/QROptionsTrait.php b/src/QROptionsTrait.php
new file mode 100644
index 000000000..b009024ed
--- /dev/null
+++ b/src/QROptionsTrait.php
@@ -0,0 +1,345 @@
+
+ * @copyright 2018 smiley
+ * @license MIT
+ *
+ * @noinspection PhpUnused
+ */
+
+namespace chillerlan\QRCode;
+
+use chillerlan\QRCode\Common\EccLevel;
+
+use function array_values, count, extension_loaded, in_array, is_numeric, max, min, sprintf, strtolower;
+
+/**
+ * The QRCode plug-in settings & setter functionality
+ */
+trait QROptionsTrait{
+
+ /**
+ * QR Code version number
+ *
+ * [1 ... 40] or QRCode::VERSION_AUTO
+ */
+ protected int $version = QRCode::VERSION_AUTO;
+
+ /**
+ * Minimum QR version
+ *
+ * if $version = QRCode::VERSION_AUTO
+ */
+ protected int $versionMin = 1;
+
+ /**
+ * Maximum QR version
+ */
+ protected int $versionMax = 40;
+
+ /**
+ * Error correct level
+ *
+ * QRCode::ECC_X where X is:
+ *
+ * - L => 7%
+ * - M => 15%
+ * - Q => 25%
+ * - H => 30%
+ */
+ protected int $eccLevel = EccLevel::L;
+
+ /**
+ * Mask Pattern to use
+ *
+ * [0...7] or QRCode::MASK_PATTERN_AUTO
+ */
+ protected int $maskPattern = QRCode::MASK_PATTERN_AUTO;
+
+ /**
+ * Add a "quiet zone" (margin) according to the QR code spec
+ */
+ protected bool $addQuietzone = true;
+
+ /**
+ * Size of the quiet zone
+ *
+ * internally clamped to [0 ... $moduleCount / 2], defaults to 4 modules
+ */
+ protected int $quietzoneSize = 4;
+
+ /**
+ * The output type
+ *
+ * - QRCode::OUTPUT_MARKUP_XXXX where XXXX = HTML, SVG
+ * - QRCode::OUTPUT_IMAGE_XXX where XXX = PNG, GIF, JPG
+ * - QRCode::OUTPUT_STRING_XXXX where XXXX = TEXT, JSON
+ * - QRCode::OUTPUT_CUSTOM
+ */
+ protected string $outputType = QRCode::OUTPUT_IMAGE_PNG;
+
+ /**
+ * the FQCN of the custom QROutputInterface if $outputType is set to QRCode::OUTPUT_CUSTOM
+ */
+ protected ?string $outputInterface = null;
+
+ /**
+ * /path/to/cache.file
+ */
+ protected ?string $cachefile = null;
+
+ /**
+ * newline string [HTML, SVG, TEXT]
+ */
+ protected string $eol = PHP_EOL;
+
+ /**
+ * size of a QR code pixel [SVG, IMAGE_*], HTML via CSS
+ */
+ protected int $scale = 5;
+
+ /**
+ * a common css class
+ */
+ protected string $cssClass = '';
+
+ /**
+ * SVG opacity
+ */
+ protected float $svgOpacity = 1.0;
+
+ /**
+ * anything between
+ *
+ * @see https://developer.mozilla.org/docs/Web/SVG/Element/defs
+ */
+ protected string $svgDefs = '';
+
+ /**
+ * SVG viewBox size. a single integer number which defines width/height of the viewBox attribute.
+ *
+ * viewBox="0 0 x x"
+ *
+ * @see https://css-tricks.com/scale-svg/#article-header-id-3
+ */
+ protected ?int $svgViewBoxSize = null;
+
+ /**
+ * string substitute for dark
+ */
+ protected string $textDark = '🔴';
+
+ /**
+ * string substitute for light
+ */
+ protected string $textLight = '⭕';
+
+ /**
+ * markup substitute for dark (CSS value)
+ */
+ protected string $markupDark = '#000';
+
+ /**
+ * markup substitute for light (CSS value)
+ */
+ protected string $markupLight = '#fff';
+
+ /**
+ * Return the image resource instead of a render if applicable.
+ * This option overrides other output options, such as $cachefile and $imageBase64.
+ *
+ * Supported by the following modules:
+ *
+ * - QRImage: resource (PHP < 8), GdImage
+ * - QRImagick: Imagick
+ * - QRFpdf: FPDF
+ *
+ * @see \chillerlan\QRCode\Output\QROutputInterface::dump()
+ *
+ * @var bool
+ */
+ protected bool $returnResource = false;
+
+ /**
+ * toggle base64 or raw image data
+ */
+ protected bool $imageBase64 = true;
+
+ /**
+ * toggle transparency, not supported by jpg
+ */
+ protected bool $imageTransparent = true;
+
+ /**
+ * @see imagecolortransparent()
+ *
+ * [R, G, B]
+ */
+ protected array $imageTransparencyBG = [255, 255, 255];
+
+ /**
+ * @see imagepng()
+ */
+ protected int $pngCompression = -1;
+
+ /**
+ * @see imagejpeg()
+ */
+ protected int $jpegQuality = 85;
+
+ /**
+ * Imagick output format
+ *
+ * @see \Imagick::setType()
+ */
+ protected string $imagickFormat = 'png';
+
+ /**
+ * Imagick background color (defaults to "transparent")
+ *
+ * @see \ImagickPixel::__construct()
+ */
+ protected ?string $imagickBG = null;
+
+ /**
+ * Measurement unit for FPDF output: pt, mm, cm, in (defaults to "pt")
+ *
+ * @see \FPDF::__construct()
+ */
+ protected string $fpdfMeasureUnit = 'pt';
+
+ /**
+ * Module values map
+ *
+ * - HTML, IMAGICK: #ABCDEF, cssname, rgb(), rgba()...
+ * - IMAGE: [63, 127, 255] // R, G, B
+ */
+ protected ?array $moduleValues = null;
+
+ /**
+ * use Imaagick (if available) when reading QR Codes
+ */
+ protected bool $useImagickIfAvailable = false;
+
+ /**
+ * clamp min/max version number
+ */
+ protected function setMinMaxVersion(int $versionMin, int $versionMax):void{
+ $min = max(1, min(40, $versionMin));
+ $max = max(1, min(40, $versionMax));
+
+ $this->versionMin = min($min, $max);
+ $this->versionMax = max($min, $max);
+ }
+
+ /**
+ * sets the minimum version number
+ */
+ protected function set_versionMin(int $version):void{
+ $this->setMinMaxVersion($version, $this->versionMax);
+ }
+
+ /**
+ * sets the maximum version number
+ */
+ protected function set_versionMax(int $version):void{
+ $this->setMinMaxVersion($this->versionMin, $version);
+ }
+
+ /**
+ * sets the error correction level
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ protected function set_eccLevel(int $eccLevel):void{
+
+ if(!isset(EccLevel::MODES[$eccLevel])){
+ throw new QRCodeException(sprintf('Invalid error correct level: %s', $eccLevel));
+ }
+
+ $this->eccLevel = $eccLevel;
+ }
+
+ /**
+ * sets/clamps the mask pattern
+ */
+ protected function set_maskPattern(int $maskPattern):void{
+
+ if($maskPattern !== QRCode::MASK_PATTERN_AUTO){
+ $this->maskPattern = max(0, min(7, $maskPattern));
+ }
+
+ }
+
+ /**
+ * sets the transparency background color
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ protected function set_imageTransparencyBG(array $imageTransparencyBG):void{
+
+ // invalid value - set to white as default
+ if(count($imageTransparencyBG) < 3){
+ $this->imageTransparencyBG = [255, 255, 255];
+
+ return;
+ }
+
+ foreach($imageTransparencyBG as $k => $v){
+
+ // cut off exceeding items
+ if($k > 2){
+ break;
+ }
+
+ if(!is_numeric($v)){
+ throw new QRCodeException('Invalid RGB value.');
+ }
+
+ // clamp the values
+ $this->imageTransparencyBG[$k] = max(0, min(255, (int)$v));
+ }
+
+ // use the array values to not run into errors with the spread operator (...$arr)
+ $this->imageTransparencyBG = array_values($this->imageTransparencyBG);
+ }
+
+ /**
+ * sets/clamps the version number
+ */
+ protected function set_version(int $version):void{
+
+ if($version !== QRCode::VERSION_AUTO){
+ $this->version = max(1, min(40, $version));
+ }
+
+ }
+
+ /**
+ * sets the FPDF measurement unit
+ *
+ * @codeCoverageIgnore
+ */
+ protected function set_fpdfMeasureUnit(string $unit):void{
+ $unit = strtolower($unit);
+
+ if(in_array($unit, ['cm', 'in', 'mm', 'pt'], true)){
+ $this->fpdfMeasureUnit = $unit;
+ }
+
+ // @todo throw or ignore silently?
+ }
+
+ /**
+ * enables Imagick for the QR Code reader if the extension is available
+ *
+ * @codeCoverageIgnore
+ */
+ protected function set_useImagickIfAvailable(bool $useImagickIfAvailable):void{
+ $this->useImagickIfAvailable = $useImagickIfAvailable && extension_loaded('imagick');
+ }
+
+}
diff --git a/tests/Common/BitBufferTest.php b/tests/Common/BitBufferTest.php
new file mode 100644
index 000000000..09342f0a5
--- /dev/null
+++ b/tests/Common/BitBufferTest.php
@@ -0,0 +1,51 @@
+
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Common;
+
+use chillerlan\QRCode\Common\{BitBuffer, Mode};
+use PHPUnit\Framework\TestCase;
+
+/**
+ * BitBuffer coverage test
+ */
+final class BitBufferTest extends TestCase{
+
+ protected BitBuffer $bitBuffer;
+
+ protected function setUp():void{
+ $this->bitBuffer = new BitBuffer;
+ }
+
+ public function bitProvider():array{
+ return [
+ 'number' => [Mode::DATA_NUMBER, 16],
+ 'alphanum' => [Mode::DATA_ALPHANUM, 32],
+ 'byte' => [Mode::DATA_BYTE, 64],
+ 'kanji' => [Mode::DATA_KANJI, 128],
+ ];
+ }
+
+ /**
+ * @dataProvider bitProvider
+ */
+ public function testPut(int $data, int $value):void{
+ $this->bitBuffer->put($data, 4);
+ $this::assertSame($value, $this->bitBuffer->getBuffer()[0]);
+ $this::assertSame(4, $this->bitBuffer->getLength());
+ }
+
+ public function testClear():void{
+ $this->bitBuffer->clear();
+ $this::assertSame([], $this->bitBuffer->getBuffer());
+ $this::assertSame(0, $this->bitBuffer->getLength());
+ }
+
+}
diff --git a/tests/Common/MaskPatternTesterTest.php b/tests/Common/MaskPatternTesterTest.php
new file mode 100644
index 000000000..d08889255
--- /dev/null
+++ b/tests/Common/MaskPatternTesterTest.php
@@ -0,0 +1,41 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Common;
+
+use chillerlan\QRCode\Common\{MaskPattern, MaskPatternTester};
+use chillerlan\QRCode\Data\{Byte, QRData};
+use chillerlan\QRCode\QROptions;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * MaskPatternTester coverage test
+ */
+final class MaskPatternTesterTest extends TestCase{
+
+ /**
+ * Tests getting the best mask pattern
+ */
+ public function testMaskpattern():void{
+ $dataInterface = new QRData(new QROptions(['version' => 10]), [new Byte('test')]);
+
+ $this::assertSame(3, (new MaskPatternTester($dataInterface))->getBestMaskPattern()->getPattern());
+ }
+
+ /**
+ * Tests getting the penalty value for a given mask pattern
+ */
+ public function testMaskpatternID():void{
+ $dataInterface = new QRData(new QROptions(['version' => 10]), [new Byte('test')]);
+
+ $this::assertSame(4243, (new MaskPatternTester($dataInterface))->testPattern(new MaskPattern(MaskPattern::PATTERN_011)));
+ }
+
+}
diff --git a/tests/Data/AlphaNumTest.php b/tests/Data/AlphaNumTest.php
new file mode 100644
index 000000000..ae99a772e
--- /dev/null
+++ b/tests/Data/AlphaNumTest.php
@@ -0,0 +1,52 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Data;
+
+use chillerlan\QRCode\Data\{AlphaNum, QRCodeDataException};
+
+/**
+ * Tests the AlphaNum class
+ */
+final class AlphaNumTest extends DatainterfaceTestAbstract{
+
+ /** @internal */
+ protected array $testdata = [AlphaNum::class, '0 $%*+-./:'];
+
+ /** @internal */
+ protected array $expected = [
+ 32, 80, 36, 212, 252, 15, 175, 251,
+ 176, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 112, 43, 9, 248, 200, 194, 75, 25,
+ 205, 173, 154, 68, 191, 16, 128,
+ 92, 112, 20, 198, 27
+ ];
+
+ /**
+ * Tests if an exception is thrown when an invalid character is encountered
+ */
+ public function testGetCharCodeException():void{
+ $this->expectException(QRCodeDataException::class);
+ $this->expectExceptionMessage('illegal char: "#" [35]');
+
+ $this->testdata = [AlphaNum::class, '#'];
+
+ $this->setTestData();
+ }
+
+}
diff --git a/tests/Data/ByteTest.php b/tests/Data/ByteTest.php
new file mode 100644
index 000000000..dce159b66
--- /dev/null
+++ b/tests/Data/ByteTest.php
@@ -0,0 +1,40 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Data;
+
+use chillerlan\QRCode\Data\Byte;
+
+/**
+ * Tests the Byte class
+ */
+final class ByteTest extends DatainterfaceTestAbstract{
+
+ /** @internal */
+ protected array $testdata = [Byte::class, '[¯\_(ツ)_/¯]'];
+
+ /** @internal */
+ protected array $expected = [
+ 64, 245, 188, 42, 245, 197, 242, 142,
+ 56, 56, 66, 149, 242, 252, 42, 245,
+ 208, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 79, 89, 226, 48, 209, 89, 151, 1,
+ 12, 73, 42, 163, 11, 34, 255, 205,
+ 21, 47, 250, 101
+ ];
+
+}
diff --git a/tests/Data/DatainterfaceTestAbstract.php b/tests/Data/DatainterfaceTestAbstract.php
new file mode 100644
index 000000000..a747cba61
--- /dev/null
+++ b/tests/Data/DatainterfaceTestAbstract.php
@@ -0,0 +1,133 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Data;
+
+use chillerlan\QRCode\Common\MaskPattern;
+use chillerlan\QRCode\QRCode;
+use chillerlan\QRCode\QROptions;
+use PHPUnit\Framework\TestCase;
+use chillerlan\QRCode\Data\{QRCodeDataException, QRData, QRMatrix};
+use ReflectionClass;
+
+use function str_repeat;
+
+/**
+ * The data interface test abstract
+ */
+abstract class DatainterfaceTestAbstract extends TestCase{
+
+ /** @internal */
+ protected ReflectionClass $reflection;
+ /** @internal */
+ protected QRData $dataInterface;
+ /** @internal */
+ protected array $testdata;
+ /** @internal */
+ protected array $expected;
+
+ /**
+ * @internal
+ */
+ protected function setUp():void{
+ $this->dataInterface = new QRData(new QROptions(['version' => 4]), []);
+ $this->reflection = new ReflectionClass($this->dataInterface);
+ }
+
+ protected function setTestData():void{
+ [$class, $data] = $this->testdata;
+ $this->dataInterface->setData([new $class($data)]);
+ }
+
+ /**
+ * Verifies the data interface instance
+ */
+ public function testInstance():void{
+ $this::assertInstanceOf(QRData::class, $this->dataInterface);
+ }
+
+ /**
+ * Tests ecc masking and verifies against a sample
+ */
+/* public function testMaskEcc():void{
+ $this->dataInterface->setData([$this->testdata]);
+
+ $maskECC = $this->reflection->getMethod('maskECC');
+ $maskECC->setAccessible(true);
+
+ $bitBuffer = $this->reflection->getProperty('bitBuffer');
+ $bitBuffer->setAccessible(true);
+ $bb = $bitBuffer->getValue($this->dataInterface);
+
+ $this::assertSame($this->expected, $maskECC->invokeArgs($this->dataInterface, [$bb->getBuffer()]));
+ }*/
+
+ /**
+ * @see testInitMatrix()
+ * @internal
+ * @return int[][]
+ */
+ public function MaskPatternProvider():array{
+ return [[0], [1], [2], [3], [4], [5], [6], [7]];
+ }
+
+ /**
+ * Tests initializing the data matrix
+ *
+ * @dataProvider MaskPatternProvider
+ */
+ public function testInitMatrix(int $maskPattern):void{
+ $this->setTestData();
+
+ $matrix = $this->dataInterface->writeMatrix(new MaskPattern($maskPattern));
+
+ $this::assertInstanceOf(QRMatrix::class, $matrix);
+ $this::assertSame($maskPattern, $matrix->maskPattern()->getPattern());
+ }
+
+ /**
+ * Tests getting the minimum QR version for the given data
+ */
+ public function testGetMinimumVersion():void{
+ $this->setTestData();
+
+ $getMinimumVersion = $this->reflection->getMethod('getMinimumVersion');
+ $getMinimumVersion->setAccessible(true);
+
+ $this::assertSame(1, $getMinimumVersion->invoke($this->dataInterface));
+ }
+
+ /**
+ * Tests if an exception is thrown when the data exceeds the maximum version while auto detecting
+ */
+ public function testGetMinimumVersionException():void{
+ $this->expectException(QRCodeDataException::class);
+ $this->expectExceptionMessage('data exceeds');
+ [$class, $data] = $this->testdata;
+
+ $this->dataInterface = new QRData(
+ new QROptions(['version' => QRCode::VERSION_AUTO]),
+ [new $class(str_repeat($data, 1337))]
+ );
+ }
+
+ /**
+ * Tests if an exception is thrown on data overflow
+ */
+ public function testCodeLengthOverflowException():void{
+ $this->expectException(QRCodeDataException::class);
+ $this->expectExceptionMessage('code length overflow');
+ [$class, $data] = $this->testdata;
+ $this->testdata = [$class, str_repeat($data, 1337)];
+
+ $this->setTestData();
+ }
+
+}
diff --git a/tests/Data/KanjiTest.php b/tests/Data/KanjiTest.php
new file mode 100644
index 000000000..aae2b9b25
--- /dev/null
+++ b/tests/Data/KanjiTest.php
@@ -0,0 +1,64 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Data;
+
+use chillerlan\QRCode\Data\{Kanji, QRCodeDataException};
+
+/**
+ * Tests the Kanji class
+ */
+final class KanjiTest extends DatainterfaceTestAbstract{
+
+ /** @internal */
+ protected array $testdata = [Kanji::class, '茗荷茗荷茗荷茗荷茗荷'];
+
+ /** @internal */
+ protected array $expected = [
+ 128, 173, 85, 26, 95, 85, 70, 151,
+ 213, 81, 165, 245, 84, 105, 125, 85,
+ 26, 92, 0, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 195, 11, 221, 91, 141, 220, 163, 46,
+ 165, 37, 163, 176, 79, 0, 64, 68,
+ 96, 113, 54, 191
+ ];
+
+ /**
+ * Tests if an exception is thrown when an invalid character is encountered
+ */
+ public function testIllegalCharException1():void{
+ $this->expectException(QRCodeDataException::class);
+ $this->expectExceptionMessage('illegal char at 1 [16191]');
+
+ $this->testdata = [Kanji::class, 'ÃÃ'];
+
+ $this->setTestData();
+ }
+
+ /**
+ * Tests if an exception is thrown when an invalid character is encountered
+ */
+ public function testIllegalCharException2():void{
+ $this->expectException(QRCodeDataException::class);
+ $this->expectExceptionMessage('illegal char at 1');
+
+ $this->testdata = [Kanji::class, 'Ã'];
+
+ $this->setTestData();
+ }
+
+}
diff --git a/tests/Data/NumberTest.php b/tests/Data/NumberTest.php
new file mode 100644
index 000000000..6400c5340
--- /dev/null
+++ b/tests/Data/NumberTest.php
@@ -0,0 +1,52 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Data;
+
+use chillerlan\QRCode\Data\{Number, QRCodeDataException};
+
+/**
+ * Tests the Number class
+ */
+final class NumberTest extends DatainterfaceTestAbstract{
+
+ /** @internal */
+ protected array $testdata = [Number::class, '0123456789'];
+
+ /** @internal */
+ protected array $expected = [
+ 16, 40, 12, 86, 106, 105, 0, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 17, 236, 17, 236, 17, 236, 17, 236,
+ 201, 141, 102, 116, 238, 162, 239, 230,
+ 222, 37, 79, 192, 42, 109, 188, 72,
+ 89, 63, 168, 151
+ ];
+
+ /**
+ * Tests if an exception is thrown when an invalid character is encountered
+ */
+ public function testGetCharCodeException():void{
+ $this->expectException(QRCodeDataException::class);
+ $this->expectExceptionMessage('illegal char: "#" [35]');
+
+ $this->testdata = [Number::class, '#'];
+
+ $this->setTestData();
+ }
+
+}
diff --git a/tests/Data/QRMatrixTest.php b/tests/Data/QRMatrixTest.php
new file mode 100755
index 000000000..bf741df16
--- /dev/null
+++ b/tests/Data/QRMatrixTest.php
@@ -0,0 +1,380 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Data;
+
+use chillerlan\QRCode\Common\{EccLevel, MaskPattern, Version};
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Data\{QRCodeDataException, QRMatrix};
+use PHPUnit\Framework\TestCase;
+
+/**
+ * Tests the QRMatix class
+ */
+final class QRMatrixTest extends TestCase{
+
+ /** @internal */
+ protected const version = 40;
+ /** @internal */
+ protected QRMatrix $matrix;
+
+ /**
+ * invokes a QRMatrix object
+ *
+ * @internal
+ */
+ protected function setUp():void{
+ $this->matrix = $this->getMatrix($this::version);
+ }
+
+ /**
+ * shortcut
+ *
+ * @internal
+ */
+ protected function getMatrix(int $version):QRMatrix{
+ return new QRMatrix(new Version($version), new EccLevel(EccLevel::L));
+ }
+
+ /**
+ * Validates the QRMatrix instance
+ */
+ public function testInstance():void{
+ $this::assertInstanceOf(QRMatrix::class, $this->matrix);
+ }
+
+ /**
+ * Tests if size() returns the actual matrix size/count
+ */
+ public function testSize():void{
+ $this::assertCount($this->matrix->size(), $this->matrix->matrix());
+ }
+
+ /**
+ * Tests if version() returns the current (given) version
+ */
+ public function testVersion():void{
+ $this::assertSame($this::version, $this->matrix->version()->getVersionNumber());
+ }
+
+ /**
+ * Tests if eccLevel() returns the current (given) ECC level
+ */
+ public function testECC():void{
+ $this::assertSame(EccLevel::MODES[EccLevel::L], $this->matrix->eccLevel()->getOrdinal());
+ }
+
+ /**
+ * Tests if maskPattern() returns the current (or default) mask pattern
+ */
+ public function testMaskPattern():void{
+ $this::assertSame(null, $this->matrix->maskPattern());
+
+ $matrix = (new QRCode)->addByteSegment('testdata')->getMatrix();
+
+ $this::assertInstanceOf(MaskPattern::class, $matrix->maskPattern());
+ $this::assertSame(MaskPattern::PATTERN_010, $matrix->maskPattern()->getPattern());
+ }
+
+ /**
+ * Tests the set(), get() and check() methods
+ */
+ public function testGetSetCheck():void{
+ $this->matrix->set(10, 10, true, QRMatrix::M_TEST);
+ $this::assertSame(QRMatrix::M_TEST | QRMatrix::IS_DARK, $this->matrix->get(10, 10));
+ $this::assertTrue($this->matrix->check(10, 10));
+
+ $this->matrix->set(20, 20, false, QRMatrix::M_TEST);
+ $this::assertSame(QRMatrix::M_TEST, $this->matrix->get(20, 20));
+ $this::assertFalse($this->matrix->check(20, 20));
+ }
+
+ /**
+ * Version data provider for several pattern tests
+ *
+ * @return int[][]
+ * @internal
+ */
+ public function versionProvider():array{
+ $versions = [];
+
+ for($i = 1; $i <= 40; $i++){
+ $versions[] = [$i];
+ }
+
+ return $versions;
+ }
+
+ /**
+ * Tests setting the dark module and verifies its position
+ *
+ * @dataProvider versionProvider
+ */
+ public function testSetDarkModule(int $version):void{
+ $matrix = $this->getMatrix($version)->setDarkModule();
+
+ $this::assertSame(QRMatrix::M_DARKMODULE | QRMatrix::IS_DARK, $matrix->get(8, $matrix->size() - 8));
+ }
+
+ /**
+ * Tests setting the finder patterns and verifies their positions
+ *
+ * @dataProvider versionProvider
+ */
+ public function testSetFinderPattern(int $version):void{
+ $matrix = $this->getMatrix($version)->setFinderPattern();
+
+ $this::assertSame(QRMatrix::M_FINDER | QRMatrix::IS_DARK, $matrix->get(0, 0));
+ $this::assertSame(QRMatrix::M_FINDER | QRMatrix::IS_DARK, $matrix->get(0, $matrix->size() - 1));
+ $this::assertSame(QRMatrix::M_FINDER | QRMatrix::IS_DARK, $matrix->get($matrix->size() - 1, 0));
+ }
+
+ /**
+ * Tests the separator patterns and verifies their positions
+ *
+ * @dataProvider versionProvider
+ */
+ public function testSetSeparators(int $version):void{
+ $matrix = $this->getMatrix($version)->setSeparators();
+
+ $this::assertSame(QRMatrix::M_SEPARATOR, $matrix->get(7, 0));
+ $this::assertSame(QRMatrix::M_SEPARATOR, $matrix->get(0, 7));
+ $this::assertSame(QRMatrix::M_SEPARATOR, $matrix->get(0, $matrix->size() - 8));
+ $this::assertSame(QRMatrix::M_SEPARATOR, $matrix->get($matrix->size() - 8, 0));
+ }
+
+ /**
+ * Tests the alignment patterns and verifies their positions - version 1 (no pattern) skipped
+ *
+ * @dataProvider versionProvider
+ */
+ public function testSetAlignmentPattern(int $version):void{
+
+ if($version === 1){
+ $this->markTestSkipped('N/A');
+
+ /** @noinspection PhpUnreachableStatementInspection */
+ return;
+ }
+
+ $matrix = $this
+ ->getMatrix($version)
+ ->setFinderPattern()
+ ->setAlignmentPattern()
+ ;
+
+ $alignmentPattern = (new Version($version))->getAlignmentPattern();
+
+ foreach($alignmentPattern as $py){
+ foreach($alignmentPattern as $px){
+
+ if($matrix->get($px, $py) === (QRMatrix::M_FINDER | QRMatrix::IS_DARK)){
+ $this::assertSame(QRMatrix::M_FINDER | QRMatrix::IS_DARK, $matrix->get($px, $py), 'skipped finder pattern');
+ continue;
+ }
+
+ $this::assertSame(QRMatrix::M_ALIGNMENT | QRMatrix::IS_DARK, $matrix->get($px, $py));
+ }
+ }
+
+ }
+
+ /**
+ * Tests the timing patterns and verifies their positions
+ *
+ * @dataProvider versionProvider
+ */
+ public function testSetTimingPattern(int $version):void{
+
+ $matrix = $this
+ ->getMatrix($version)
+ ->setAlignmentPattern()
+ ->setTimingPattern()
+ ;
+
+ $size = $matrix->size();
+
+ for($i = 7; $i < $size - 7; $i++){
+ if($i % 2 === 0){
+ $p1 = $matrix->get(6, $i);
+
+ if($p1 === (QRMatrix::M_ALIGNMENT | QRMatrix::IS_DARK)){
+ $this::assertSame(QRMatrix::M_ALIGNMENT | QRMatrix::IS_DARK, $p1, 'skipped alignment pattern');
+ continue;
+ }
+
+ $this::assertSame(QRMatrix::M_TIMING | QRMatrix::IS_DARK, $p1);
+ $this::assertSame(QRMatrix::M_TIMING | QRMatrix::IS_DARK, $matrix->get($i, 6));
+ }
+ }
+ }
+
+ /**
+ * Tests the version patterns and verifies their positions - version < 7 skipped
+ *
+ * @dataProvider versionProvider
+ */
+ public function testSetVersionNumber(int $version):void{
+
+ if($version < 7){
+ $this->markTestSkipped('N/A');
+
+ /** @noinspection PhpUnreachableStatementInspection */
+ return;
+ }
+
+ $matrix = $this->getMatrix($version)->setVersionNumber(true);
+
+ $this::assertSame(QRMatrix::M_VERSION, $matrix->get($matrix->size() - 9, 0));
+ $this::assertSame(QRMatrix::M_VERSION, $matrix->get($matrix->size() - 11, 5));
+ $this::assertSame(QRMatrix::M_VERSION, $matrix->get(0, $matrix->size() - 9));
+ $this::assertSame(QRMatrix::M_VERSION, $matrix->get(5, $matrix->size() - 11));
+ }
+
+ /**
+ * Tests the format patterns and verifies their positions
+ *
+ * @dataProvider versionProvider
+ */
+ public function testSetFormatInfo(int $version):void{
+ $matrix = $this->getMatrix($version)->setFormatInfo(new MaskPattern(MaskPattern::PATTERN_000), true);
+
+ $this::assertSame(QRMatrix::M_FORMAT, $matrix->get(8, 0));
+ $this::assertSame(QRMatrix::M_FORMAT, $matrix->get(0, 8));
+ $this::assertSame(QRMatrix::M_FORMAT, $matrix->get($matrix->size() - 1, 8));
+ $this::assertSame(QRMatrix::M_FORMAT, $matrix->get($matrix->size() - 8, 8));
+ }
+
+ /**
+ * Tests the quiet zone pattern and verifies its position
+ *
+ * @dataProvider versionProvider
+ */
+ public function testSetQuietZone(int $version):void{
+ $matrix = $this->getMatrix($version);
+
+ $size = $matrix->size();
+ $q = 5;
+
+ $matrix->set(0, 0, true, QRMatrix::M_TEST);
+ $matrix->set($size - 1, $size - 1, true, QRMatrix::M_TEST);
+
+ $matrix->setQuietZone($q);
+
+ $this::assertCount($size + 2 * $q, $matrix->matrix());
+ $this::assertCount($size + 2 * $q, $matrix->matrix()[$size - 1]);
+
+ $size = $matrix->size();
+ $this::assertSame(QRMatrix::M_QUIETZONE, $matrix->get(0, 0));
+ $this::assertSame(QRMatrix::M_QUIETZONE, $matrix->get($size - 1, $size - 1));
+
+ $this::assertSame(QRMatrix::M_TEST | QRMatrix::IS_DARK, $matrix->get($q, $q));
+ $this::assertSame(QRMatrix::M_TEST | QRMatrix::IS_DARK, $matrix->get($size - 1 - $q, $size - 1 - $q));
+ }
+
+ /**
+ * Tests if an exception is thrown in an attempt to create it before data was written
+ */
+ public function testSetQuietZoneException():void{
+ $this->expectException(QRCodeDataException::class);
+ $this->expectExceptionMessage('use only after writing data');
+
+ $this->matrix->setQuietZone();
+ }
+
+ public function testSetLogoSpaceOrientation():void{
+ $o = new QROptions;
+ $o->version = 10;
+ $o->eccLevel = EccLevel::H;
+ $o->addQuietzone = false;
+
+ $matrix = (new QRCode($o))->addByteSegment('testdata')->getMatrix();
+ // also testing size adjustment to uneven numbers
+ $matrix->setLogoSpace(20, 14);
+
+ // NW corner
+ $this::assertNotSame(QRMatrix::M_LOGO, $matrix->get(17, 20));
+ $this::assertSame(QRMatrix::M_LOGO, $matrix->get(18, 21));
+
+ // SE corner
+ $this::assertSame(QRMatrix::M_LOGO, $matrix->get(38, 35));
+ $this::assertNotSame(QRMatrix::M_LOGO, $matrix->get(39, 36));
+ }
+
+ public function testSetLogoSpacePosition():void{
+ $o = new QROptions;
+ $o->version = 10;
+ $o->eccLevel = EccLevel::H;
+ $o->addQuietzone = true;
+ $o->quietzoneSize = 10;
+
+ $m = (new QRCode($o))->addByteSegment('testdata')->getMatrix();
+
+ // logo space should not overwrite quiet zone & function patterns
+ $m->setLogoSpace(21, 21, -10, -10);
+ $this::assertSame(QRMatrix::M_QUIETZONE, $m->get(9, 9));
+ $this::assertSame(QRMatrix::M_FINDER | QRMatrix::IS_DARK, $m->get(10, 10));
+ $this::assertSame(QRMatrix::M_FINDER | QRMatrix::IS_DARK, $m->get(16, 16));
+ $this::assertSame(QRMatrix::M_SEPARATOR, $m->get(17, 17));
+ $this::assertSame(QRMatrix::M_FORMAT | QRMatrix::IS_DARK, $m->get(18, 18));
+ $this::assertSame(QRMatrix::M_LOGO, $m->get(19, 19));
+ $this::assertSame(QRMatrix::M_LOGO, $m->get(20, 20));
+ $this::assertNotSame(QRMatrix::M_LOGO, $m->get(21, 21));
+
+ // i just realized that setLogoSpace() could be called multiple times
+ // on the same instance and i'm not going to do anything about it :P
+ $m->setLogoSpace(21, 21, 45, 45);
+ $this::assertNotSame(QRMatrix::M_LOGO, $m->get(54, 54));
+ $this::assertSame(QRMatrix::M_LOGO, $m->get(55, 55));
+ $this::assertSame(QRMatrix::M_QUIETZONE, $m->get(67, 67));
+ }
+
+ public function testSetLogoSpaceInvalidEccException():void{
+ $this->expectException(QRCodeDataException::class);
+ $this->expectExceptionMessage('ECC level "H" required to add logo space');
+
+ (new QRCode)->addByteSegment('testdata')->getMatrix()->setLogoSpace(50, 50);
+ }
+
+ public function testSetLogoSpaceMaxSizeException():void{
+ $this->expectException(QRCodeDataException::class);
+ $this->expectExceptionMessage('logo space exceeds the maximum error correction capacity');
+
+ $o = new QROptions;
+ $o->version = 5;
+ $o->eccLevel = EccLevel::H;
+
+ (new QRCode($o))->addByteSegment('testdata')->getMatrix()->setLogoSpace(50, 50);
+ }
+
+ /**
+ * Tests flipping the value of a module
+ */
+ public function testFlip():void{
+ // using the dark module here because i'm lazy
+ $matrix = $this->getMatrix(10)->setDarkModule();
+ $x = 8;
+ $y = $matrix->size() - 8;
+
+ // cover checkType()
+ $this::assertTrue($matrix->checkType($x, $y, QRMatrix::M_DARKMODULE));
+ // verify the current state (dark)
+ $this::assertSame(QRMatrix::M_DARKMODULE | QRMatrix::IS_DARK, $matrix->get($x, $y));
+ // flip
+ $matrix->flip($x, $y);
+ // verify flip
+ $this::assertSame(QRMatrix::M_DARKMODULE, $matrix->get($x, $y));
+ // flip again
+ $matrix->flip($x, $y);
+ // verify flip
+ $this::assertSame(QRMatrix::M_DARKMODULE | QRMatrix::IS_DARK, $matrix->get($x, $y));
+ }
+
+}
diff --git a/tests/Output/QRFpdfTest.php b/tests/Output/QRFpdfTest.php
new file mode 100644
index 000000000..c1f65b44e
--- /dev/null
+++ b/tests/Output/QRFpdfTest.php
@@ -0,0 +1,97 @@
+
+ * @copyright 2020 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Output;
+
+use FPDF;
+use chillerlan\QRCode\Output\{QRFpdf, QROutputInterface};
+use chillerlan\QRCode\{QRCode, QROptions};
+
+use function class_exists, substr;
+
+/**
+ * Tests the QRFpdf output module
+ */
+class QRFpdfTest extends QROutputTestAbstract{
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ public function setUp():void{
+
+ if(!class_exists(FPDF::class)){
+ $this->markTestSkipped('FPDF not available');
+
+ /** @noinspection PhpUnreachableStatementInspection */
+ return;
+ }
+
+ parent::setUp();
+ }
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ protected function getOutputInterface(QROptions $options):QROutputInterface{
+ return new QRFpdf($options, $this->matrix);
+ }
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ public function types():array{
+ return [
+ 'fpdf' => [QRCode::OUTPUT_FPDF],
+ ];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function testSetModuleValues():void{
+
+ $this->options->moduleValues = [
+ // data
+ 1024 => [0, 0, 0],
+ 4 => [255, 255, 255],
+ ];
+
+ $this->outputInterface = $this->getOutputInterface($this->options);
+ $this->outputInterface->dump();
+
+ $this::assertTrue(true); // tricking the code coverage
+ }
+
+ /**
+ * @inheritDoc
+ * @dataProvider types
+ */
+ public function testRenderImage(string $type):void{
+ $this->options->outputType = $type;
+ $this->options->imageBase64 = false;
+
+ // substr() to avoid CreationDate
+ $expected = substr(file_get_contents(__DIR__.'/samples/'.$type), 0, 2500);
+ $actual = substr((new QRCode($this->options))->render('test'), 0, 2500);
+
+ $this::assertSame($expected, $actual);
+ }
+
+ public function testOutputGetResource():void{
+ $this->options->returnResource = true;
+ $this->outputInterface = $this->getOutputInterface($this->options);
+
+ $this::assertInstanceOf(FPDF::class, $this->outputInterface->dump());
+ }
+
+}
diff --git a/tests/Output/QRImageTest.php b/tests/Output/QRImageTest.php
new file mode 100644
index 000000000..ff6e1bb36
--- /dev/null
+++ b/tests/Output/QRImageTest.php
@@ -0,0 +1,87 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Output;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Output\{QROutputInterface, QRImage};
+
+/**
+ * Tests the QRImage output module
+ */
+class QRImageTest extends QROutputTestAbstract{
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ public function setUp():void{
+
+ if(!extension_loaded('gd')){
+ $this->markTestSkipped('ext-gd not loaded');
+ return;
+ }
+
+ parent::setUp();
+ }
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ protected function getOutputInterface(QROptions $options):QROutputInterface{
+ return new QRImage($options, $this->matrix);
+ }
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ public function types():array{
+ return [
+ 'png' => [QRCode::OUTPUT_IMAGE_PNG],
+ 'gif' => [QRCode::OUTPUT_IMAGE_GIF],
+ 'jpg' => [QRCode::OUTPUT_IMAGE_JPG],
+ ];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function testSetModuleValues():void{
+
+ $this->options->moduleValues = [
+ // data
+ 1024 => [0, 0, 0],
+ 4 => [255, 255, 255],
+ ];
+
+ $this->outputInterface = $this->getOutputInterface($this->options);
+ $this->outputInterface->dump();
+
+ $this::assertTrue(true); // tricking the code coverage
+ }
+
+ /**
+ *
+ */
+ public function testOutputGetResource():void{
+ $this->options->returnResource = true;
+ $this->outputInterface = $this->getOutputInterface($this->options);
+
+ $actual = $this->outputInterface->dump();
+
+ /** @noinspection PhpFullyQualifiedNameUsageInspection */
+ \PHP_MAJOR_VERSION >= 8
+ ? $this::assertInstanceOf(\GdImage::class, $actual)
+ : $this::assertIsResource($actual);
+ }
+
+}
diff --git a/tests/Output/QRImagickTest.php b/tests/Output/QRImagickTest.php
new file mode 100644
index 000000000..48e1ab1d7
--- /dev/null
+++ b/tests/Output/QRImagickTest.php
@@ -0,0 +1,84 @@
+
+ * @copyright 2018 smiley
+ * @license MIT
+ *
+ * @noinspection PhpUndefinedClassInspection
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCodeTest\Output;
+
+use Imagick;
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Output\{QROutputInterface, QRImagick};
+
+/**
+ * Tests the QRImagick output module
+ */
+class QRImagickTest extends QROutputTestAbstract{
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ public function setUp():void{
+
+ if(!extension_loaded('imagick')){
+ $this->markTestSkipped('ext-imagick not loaded');
+
+ /** @noinspection PhpUnreachableStatementInspection */
+ return;
+ }
+
+ parent::setUp();
+ }
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ protected function getOutputInterface(QROptions $options):QROutputInterface{
+ return new QRImagick($options, $this->matrix);
+ }
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ public function types():array{
+ return [
+ 'imagick' => [QRCode::OUTPUT_IMAGICK],
+ ];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function testSetModuleValues():void{
+
+ $this->options->moduleValues = [
+ // data
+ 1024 => '#4A6000',
+ 4 => '#ECF9BE',
+ ];
+
+ $this->outputInterface = $this->getOutputInterface($this->options);
+ $this->outputInterface->dump();
+
+ $this::assertTrue(true); // tricking the code coverage
+ }
+
+ public function testOutputGetResource():void{
+ $this->options->returnResource = true;
+ $this->outputInterface = $this->getOutputInterface($this->options);
+
+ $this::assertInstanceOf(Imagick::class, $this->outputInterface->dump());
+ }
+
+
+}
diff --git a/tests/Output/QRMarkupTest.php b/tests/Output/QRMarkupTest.php
new file mode 100644
index 000000000..5c9852978
--- /dev/null
+++ b/tests/Output/QRMarkupTest.php
@@ -0,0 +1,57 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Output;
+
+use chillerlan\QRCode\{Data\QRMatrix, QRCode, QROptions};
+use chillerlan\QRCode\Output\{QROutputInterface, QRMarkup};
+
+/**
+ * Tests the QRMarkup output module
+ */
+class QRMarkupTest extends QROutputTestAbstract{
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ protected function getOutputInterface(QROptions $options):QROutputInterface{
+ return new QRMarkup($options, $this->matrix);
+ }
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ public function types():array{
+ return [
+ 'html' => [QRCode::OUTPUT_MARKUP_HTML],
+ 'svg' => [QRCode::OUTPUT_MARKUP_SVG],
+ ];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function testSetModuleValues():void{
+ $this->options->imageBase64 = false;
+ $this->options->moduleValues = [
+ // data
+ QRMatrix::M_DATA | QRMatrix::IS_DARK => '#4A6000',
+ QRMatrix::M_DATA => '#ECF9BE',
+ ];
+
+ $this->outputInterface = $this->getOutputInterface($this->options);
+ $data = $this->outputInterface->dump();
+ $this::assertStringContainsString('#4A6000', $data);
+ $this::assertStringContainsString('#ECF9BE', $data);
+ }
+
+}
diff --git a/tests/Output/QROutputTestAbstract.php b/tests/Output/QROutputTestAbstract.php
new file mode 100644
index 000000000..c06f19939
--- /dev/null
+++ b/tests/Output/QROutputTestAbstract.php
@@ -0,0 +1,140 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Output;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Common\MaskPattern;
+use chillerlan\QRCode\Data\{Byte, QRData, QRMatrix};
+use chillerlan\QRCode\Output\{QRCodeOutputException, QROutputInterface};
+use PHPUnit\Framework\TestCase;
+
+use function file_exists, in_array, mkdir;
+
+use const PHP_OS_FAMILY, PHP_VERSION_ID;
+
+/**
+ * Test abstract for the several (built-in) output modules,
+ * should also be used to test custom output modules
+ */
+abstract class QROutputTestAbstract extends TestCase{
+
+ /** @internal */
+ protected string $builddir = __DIR__.'/../../.build/output_test';
+ /** @internal */
+ protected QROutputInterface $outputInterface;
+ /** @internal */
+ protected QROptions $options;
+ /** @internal */
+ protected QRMatrix $matrix;
+
+ /**
+ * Attempts to create a directory under /.build and instances several required objects
+ *
+ * @internal
+ */
+ protected function setUp():void{
+
+ if(!file_exists($this->builddir)){
+ mkdir($this->builddir, 0777, true);
+ }
+
+ $this->options = new QROptions;
+ $this->matrix = (new QRData($this->options, [new Byte('testdata')]))
+ ->writeMatrix(new MaskPattern(MaskPattern::PATTERN_010));
+ $this->outputInterface = $this->getOutputInterface($this->options);
+ }
+
+ /**
+ * Returns a QROutputInterface instance with the given options and using $this->matrix
+ *
+ * @internal
+ */
+ abstract protected function getOutputInterface(QROptions $options):QROutputInterface;
+
+ /**
+ * Validate the instance of the interface
+ */
+ public function testInstance():void{
+ $this::assertInstanceOf(QROutputInterface::class, $this->outputInterface);
+ }
+
+ /**
+ * Tests if an exception is thrown when trying to write a cache file to an invalid destination
+ */
+ public function testSaveException():void{
+ $this->expectException(QRCodeOutputException::class);
+ $this->expectExceptionMessage('Could not write data to cache file: /foo/bar.test');
+
+ $this->options->cachefile = '/foo/bar.test';
+ $this->outputInterface = $this->getOutputInterface($this->options);
+ $this->outputInterface->dump();
+ }
+
+ /**
+ * covers the module values settings
+ */
+ abstract public function testSetModuleValues():void;
+
+ /*
+ * additional, non-essential, potentially inaccurate coverage tests
+ */
+
+ /**
+ * @see testStringOutput()
+ * @return string[][]
+ * @internal
+ */
+ abstract public function types():array;
+
+ /**
+ * coverage of the built-in output modules
+ *
+ * @dataProvider types
+ */
+ public function testStringOutput(string $type):void{
+ $this->options->outputType = $type;
+ $this->options->cachefile = $this->builddir.'/test.'.$type;
+ $this->options->imageBase64 = false;
+
+ $this->outputInterface = $this->getOutputInterface($this->options);
+ $data = $this->outputInterface->dump(); // creates the cache file
+
+ $this::assertSame($data, file_get_contents($this->options->cachefile));
+ }
+
+ /**
+ * covers the built-in output modules, tests against pre-rendered data
+ *
+ * @dataProvider types
+ */
+ public function testRenderImage(string $type):void{
+
+ // may fail on CI, different PHP (platform) versions produce different output
+ // the samples were generated on php-7.4.3-Win32-vc15-x64
+ if(
+ (PHP_OS_FAMILY !== 'Windows' || PHP_VERSION_ID >= 80100)
+ && in_array($type, [QRCode::OUTPUT_IMAGE_JPG, QRCode::OUTPUT_IMAGICK, QRCode::OUTPUT_MARKUP_SVG])
+ ){
+ $this::markTestSkipped('may fail on CI');
+
+ /** @noinspection PhpUnreachableStatementInspection */
+ return;
+ }
+
+ $this->options->outputType = $type;
+
+ $this::assertSame(
+ trim(file_get_contents(__DIR__.'/samples/'.$type)),
+ trim((new QRCode($this->options))->render('test'))
+ );
+ }
+
+}
diff --git a/tests/Output/QRStringTest.php b/tests/Output/QRStringTest.php
new file mode 100644
index 000000000..91bf11c83
--- /dev/null
+++ b/tests/Output/QRStringTest.php
@@ -0,0 +1,76 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest\Output;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+use chillerlan\QRCode\Common\EccLevel;
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\Output\{QROutputInterface, QRString};
+use chillerlan\QRCodeExamples\MyCustomOutput;
+
+/**
+ * Tests the QRString output module
+ */
+class QRStringTest extends QROutputTestAbstract{
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ protected function getOutputInterface(QROptions $options):QROutputInterface{
+ return new QRString($options, $this->matrix);
+ }
+
+ /**
+ * @inheritDoc
+ * @internal
+ */
+ public function types():array{
+ return [
+ 'json' => [QRCode::OUTPUT_STRING_JSON],
+ 'text' => [QRCode::OUTPUT_STRING_TEXT],
+ ];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function testSetModuleValues():void{
+
+ $this->options->moduleValues = [
+ // data
+ QRMatrix::M_DATA | QRMatrix::IS_DARK => 'A',
+ QRMatrix::M_DATA => 'B',
+ ];
+
+ $this->outputInterface = $this->getOutputInterface($this->options);
+ $data = $this->outputInterface->dump();
+
+ $this::assertStringContainsString('A', $data);
+ $this::assertStringContainsString('B', $data);
+ }
+
+ /**
+ * covers the custom output functionality via an example
+ */
+ public function testCustomOutput():void{
+ $this->options->version = 5;
+ $this->options->eccLevel = EccLevel::L;
+ $this->options->outputType = QRCode::OUTPUT_CUSTOM;
+ $this->options->outputInterface = MyCustomOutput::class;
+
+ $this::assertSame(
+ file_get_contents(__DIR__.'/samples/custom'),
+ (new QRCode($this->options))->render('test')
+ );
+ }
+
+}
diff --git a/tests/Output/samples/custom b/tests/Output/samples/custom
new file mode 100644
index 000000000..e19a64352
--- /dev/null
+++ b/tests/Output/samples/custom
@@ -0,0 +1,45 @@
+000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000011111110111010000101111010000011111110000
+000010000010111000001101011000001010000010000
+000010111010101101011000001101011010111010000
+000010111010110100111110010100111010111010000
+000010111010000001101011000001101010111010000
+000010000010100111110010100111110010000010000
+000011111110101010101010101010101011111110000
+000000000000010010100111110010100000000000000
+000011001110000101111010000101111001011110000
+000000000000111010000101111010000111100010000
+000001011010100111110010100111110011001010000
+000010000101111101011000001101011110011110000
+000000011010100011000001101011000101110100000
+000011001100001001101011000001101010011010000
+000010110111110000001101011000001100110100000
+000010000100100010100111110010100001100100000
+000011111110111101111010000101111010100110000
+000011010000111010000101111010000111100100000
+000010101111111111110010100111110011001000000
+000010110001110101011000001101011110011010000
+000001001111100011000001101011000101110010000
+000011000100110001101011000001101010011100000
+000001000011001000001101011000001100110000000
+000011101001011010100111110010100001100000000
+000010111010001101111010000101111010100110000
+000011100000001010000101111010000111100000000
+000000001110110111110010100111110011001000000
+000000011001011101011000001101011110011100000
+000011111110101011000001101011001111110110000
+000000000000110001101011000001101000111100000
+000011111110001000001101011000011010110000000
+000010000010101010100111110010101000100100000
+000010111010111101111010000101111111100110000
+000010111010011010000101111010001101100010000
+000010111010000111110010100111100101101100000
+000010000010101101011000001101001100111100000
+000011111110101011000001101011000110010110000
+000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000
diff --git a/tests/Output/samples/fpdf b/tests/Output/samples/fpdf
new file mode 100644
index 000000000..15b041b9f
Binary files /dev/null and b/tests/Output/samples/fpdf differ
diff --git a/tests/Output/samples/gif b/tests/Output/samples/gif
new file mode 100644
index 000000000..aff9a0fa9
--- /dev/null
+++ b/tests/Output/samples/gif
@@ -0,0 +1 @@
+data:image/gif;base64,R0lGODlhkQCRAIAAAAQCBP///yH5BAEAAAEALAAAAACRAJEAAAL+jI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si8YhMKpfMpvOpBEin1Kr1ek1gpY6qdgsOU1niMviL7Y4R5raV7I4D0NmGly13w/Nm+tu+dsDXtjcY5nfHkGhgWFY4x7GoIOlXGRmYQnmhKYg56clZEToyOjF6CuqJURrCGoE6pRaLN7vh+nH7AMsFWMuouglcIklIy9vpG0CcmlyMfJzJLGb5DFlN/dvcZ2wdre3Ija0s3T3+PR2+sgx+nd7+ng1tjg6Psk4fX36vT464JX5i3xl3+WTJE+esoDpyA+vtKodwW72ADP8RnAfxYkT+dgpVCLToUFjHBR/TaDRRsk7IZAAvJsT4yJ/Jlfh0VZw50t5NlTlfGuTHEebCc4dcSoSQ8s9ElDuV9jxqk2jDnBSlgnwa9KdMnkI9iqSQa9VXU2NblX11VkPYXgeZsgz2FsRaRWk9zCVZV2xcUXkv7QXb18LdT39FNKq5b+NhnDoXM05s1DHXqpIh0wRaObDazJaxyuM8WC9ozKQVg4bC1ilqHVNX52jt+gbs2DVm087nM/Lnrw9bh4YbR6vujEur+dacgY/wy8vxBv0tOE/zrlRPGr9KvXHw1Kanb1UNne/flw9bXu6snThu7OWtewaPXLR6jMfH9+PODT3l+eT+ed+naxVRMaVWX1vM4XedgEPtFuBkCK4nx0/hAaZggg4CyKAhEsYHXGn5YTfdYhsWZlaFEF7oXIaDjGggCejlhiFpyhHIYXQNzvedabnot6CMdRXoI4kHvpAUWY81ZaSKMRQpAZA5NvmfC0yideSNSXpIg5Pu0ceef1W22IKWxZ0In31f4tjji14itmaZYD6ipplsyukmml6daR6ZPFqI5W17vtfdbYA+mN2fUBgap5KCFtpmoGMeGiVhig4p5WhvbgmkbZVaeiWLQaIYpqV2VsfndxN2IOqo2T3J56l+jdYpjTe6akuNpL4HI5k2TNheqyB+KKQ3l1IJZlKachn+bHqoNgpsTazOwCuzvjL2rAzGRmqqtEhBtV+2JkpaVIxXHmtYU4hyu6W3w+JiLrbNqpYnuOSWqKKYKYZ777i/DtPut/M+am+os0b6763ITrppvV1aCSWdhnb7bqLwElotreIpjOe7scb4sFsYcyXxud8u2S/CjGYsbro9qtvnySBruyoM1/qLJKbuEllyy1Ma3PGd60b1sR7D9SqsqiEepiPMENc68HM1p+yz0YSKOLTSHksNtZ5Q7QwunJlVvK/BO6QKNrUqvyZq2aBanB5nak/86Nhpa0x31ovejXfeeu/Nd99+/w144IIPTnjhhh+OeOKKL854444/DnnkkhcCXgAAOw==
diff --git a/tests/Output/samples/html b/tests/Output/samples/html
new file mode 100644
index 000000000..aa154a333
--- /dev/null
+++ b/tests/Output/samples/html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/Output/samples/imagick b/tests/Output/samples/imagick
new file mode 100644
index 000000000..377725d85
Binary files /dev/null and b/tests/Output/samples/imagick differ
diff --git a/tests/Output/samples/jpg b/tests/Output/samples/jpg
new file mode 100644
index 000000000..dd46e24a9
--- /dev/null
+++ b/tests/Output/samples/jpg
@@ -0,0 +1 @@
+data:image/jpg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gODUK/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAkQCRAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A+y6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDxn9pr46f8KW/wCEf/4pb+3f7Z+0/wDMQ+zeT5Plf9M33Z832xt7548Z/wCG5/8Aql3/AJX/AP7no/4Kaf8ANPv+4l/7a16n4O8NfBnw1+zv4W8aeNPBnhKO0j8P6bNf382gRXEjPLFEu9tsbOzM7jJwTk5Pc0AeWf8ADc//AFS7/wAr/wD9z0f8Nz/9Uu/8r/8A9z12f/Cy/wBjb/oG+DP/AAjJP/kaum+HF9+zF8RNcm0Twd4Y8GanfwWzXUkX/CKiHbErKpbMkCj7zqMZzz9aAOA8Cftlf8JR440Hwz/wrj7J/a+pW9j9o/tvf5Xmyqm/b5A3Y3ZxkZx1FemftNfHT/hS3/CP/wDFLf27/bP2n/mIfZvJ8nyv+mb7s+b7Y2988fLPxJ0nStD/AG+NL0vRNMstMsIPEmh+Va2cCwxR7ltWO1FAAyxJOB1JNfYHx08S/Brw7/Y//C27bRZvtHn/ANm/2jozX+Nvl+btxE+z70eemeOuOADzL4JftW/8LK+J+keCv+EC/sr+0fO/0v8AtfzvL8uCSX7nkrnOzHUYzn2r6Zr4T+H3gvU/AHx4/wCF5apo8Oj/AAqF9e39nqcLRmNLK7SVLMrbRkzKrefCAnlgqG+YKAcfY3w48e+E/iJoc2t+DtW/tOwguWtZJfs8sO2VVViuJFU/ddTnGOfrQB5N+zj+0h/wuHxxeeGf+EM/sT7Npr332j+0/tG7bLEmzb5SYz5uc57dOeMX42/tW/8ACtfifq/gr/hAv7V/s7yf9L/tfyfM8yCOX7nktjG/HU5xn2rxn/gnF/yW/Wf+xbn/APSm2qH452lrf/t/QWN9bQ3Vpc+INEhngmjDxyo0VoGRlPDKQSCDwQaAO5/4bn/6pd/5X/8A7no/4bn/AOqXf+V//wC569m+JsH7OPw1/s//AITXwj4M0r+0fN+yf8Uuk3meXs3/AOqhbGN6dcZzx3rjP+Fl/sbf9A3wZ/4Rkn/yNQBxn/Dc/wD1S7/yv/8A3PXpv7OP7SH/AAuHxxeeGf8AhDP7E+zaa999o/tP7Ru2yxJs2+UmM+bnOe3TnjpvhxonwA+Imhza34O8FeDNTsILlrWSX/hGo4dsqqrFcSRKfuupzjHP1r5Z/wCCcX/Jb9Z/7Fuf/wBKbagD7/ooooAKKKKACiiigD4z/wCCmn/NPv8AuJf+2tdn8ZP+Uedj/wBi3oX/AKMtK4z/AIKaf80+/wC4l/7a16zqXgrVfiJ+xdoHg7RLiyt7/UPDejeVJeOyxL5Yt5TuKqx+6hxgHnH1oA/Nqvpn/gnF/wAlv1n/ALFuf/0ptqP+GKvin/0H/Bn/AIGXP/yPXsH7Jv7PXjT4TfEXUPEfiPU/D91aXOkSWSJYTzPIHaaFwSHiQbcRt3zkjigDx/4yf8pDLH/sZNC/9F2ldn/wU0/5p9/3Ev8A21rjPjJ/ykMsf+xk0L/0XaV9Aftg/BTxV8Yf+EW/4RnUNFtP7I+1/aP7RmlTd5vk7duyN848ps5x1HXsAdN4b8FaV8RP2VfCng7W7i9t7DUPDelebJZuqyr5ccEo2llYfeQZyDxn618//Efxrqv7JmuQ/Dn4c29lquk6jbLrc02vo01ws8jNCyq0LRKE226EAqTktzjAHM/8MVfFP/oP+DP/AAMuf/kevqD9k34X6/8ACb4dah4c8R3mmXV3c6vJeo9hI7xhGhhQAl0Q7sxt2xgjmgA+Cn7PXgv4TeKrnxH4c1PxBdXdzYvZOl/PC8YRnjckBIkO7Ma98YJ4r5f+Mn/KQyx/7GTQv/RdpX3/AF8AfGT/AJSGWP8A2Mmhf+i7SgDs/wDgpp/zT7/uJf8AtrXxnX6M/tg/BTxV8Yf+EW/4RnUNFtP7I+1/aP7RmlTd5vk7duyN848ps5x1HXt8/wD/AAxV8U/+g/4M/wDAy5/+R6APZv8AgnF/yRDWf+xkn/8ASa2rxn/gnF/yW/Wf+xbn/wDSm2r6g/ZN+F+v/Cb4dah4c8R3mmXV3c6vJeo9hI7xhGhhQAl0Q7sxt2xgjmvl/wD4Jxf8lv1n/sW5/wD0ptqAPv8AooooAKKKKACiiigD5N/4KHeE/FXij/hBv+EZ8Na1rf2b+0PtH9nWMtx5W77Nt3bFO3O1sZ64PpXkuheN/wBrrQ9DsNE0vRvGdvYafbR2trF/wh6t5cUahUXLW5JwoAyST619TftNfHT/AIUt/wAI/wD8Ut/bv9s/af8AmIfZvJ8nyv8Apm+7Pm+2NvfPHjP/AA3P/wBUu/8AK/8A/c9AHGf8LL/bJ/6BvjP/AMIyP/5Go/4WX+2T/wBA3xn/AOEZH/8AI1dn/wANz/8AVLv/ACv/AP3PX2ZQB+cHg7w18ZvEv7RHhbxp408GeLZLuTxBps1/fzaBLbxqkUsS722xqiqqIMnAGBk9zX1B+2D4l+Mvh3/hFv8AhUltrU32j7X/AGl/Z2jLf42+T5W7MT7PvSY6Z5644PGX7SH/AAjv7Q0Hwk/4Qz7V5upWFj/aX9p7MfaVhO/yvKP3fN6b+dvUZ42f2mvjp/wpb/hH/wDilv7d/tn7T/zEPs3k+T5X/TN92fN9sbe+eADmfib8an0X9mUX9h470W3+JUGm6eLu0M1s17FeGSFbpHtWB2uuZQyFBsweBjjZ/Yp8e+LPiJ8LNT1vxjq39p38Gty2scv2eKHbEsEDBcRqo+87HOM8/SvnP42/Avzvhhq/7QP/AAlO3+3PJ13+xf7Pz5H2+eNvK8/zPm2efjd5Y3bei549m/4Jxf8AJENZ/wCxkn/9JragCH9k3xf8ftf+IuoWfxUtPEEOippEksDX/h9bKP7QJoQoDiFMtsMny56ZOOOPH/2ofCPxN/4al1nxf4Q8HeJrv7Nc2F1YX9no8txF5sVtAQykIyNtdMEHIyCD3FfWf7R3xX/4U94Hs/E39g/239p1JLH7P9s+z7d0Ur792x848rGMd+vHOz8EvHX/AAsr4YaR41/sv+yv7R87/RPtHneX5c8kX39q5zsz0GM496APjP8A4WX+2T/0DfGf/hGR/wDyNR/wsv8AbJ/6BvjP/wAIyP8A+Rq+mf2mvjp/wpb/AIR//ilv7d/tn7T/AMxD7N5Pk+V/0zfdnzfbG3vnjxn/AIbn/wCqXf8Alf8A/uegDjP+Fl/tk/8AQN8Z/wDhGR//ACNXQfsDeCPGnhr4w6tfeI/CHiDRrSTw/NCk9/ps1vGzm4tyEDOoBbCscdcA+lfSf7OPxX/4XD4HvPE39g/2J9m1J7H7P9s+0btsUT792xMZ83GMduvPHGfs4/tIf8Lh8cXnhn/hDP7E+zaa999o/tP7Ru2yxJs2+UmM+bnOe3TngA9/ooooAKKKKACiiigD4z/4Kaf80+/7iX/trXqfg7w18GfDX7O/hbxp408GeEo7SPw/ps1/fzaBFcSM8sUS722xs7MzuMnBOTk9zXln/BTT/mn3/cS/9ta7P4yf8o87H/sW9C/9GWlAHkHxr+Gq/GTxVbeJ/wBnnwrpl74VtbFLC7ksIoNMjF6rySODFN5TM3lyw/OFIIIGflIHiX/C2Pin/wBFL8Z/+D25/wDi6634KftC+NPhN4VufDnhzTPD91aXN896738EzyB2SNCAUlQbcRr2zknmvp//AIYq+Fn/AEH/ABn/AOBlt/8AI9AHn/ww8efC/Xvgrb6Vqt1Zan8adQtru2sNQu9Nkl1JtReSVLEi+aM7XXNuEkMg8vC8rt49A/Zl+Fvjub/hIP8AhoHQv+Eix9m/sX/hIbuDV/I/1vn+VueTyt37nd03bV67eKWvfsv+Afhrod/8RtC1fxNc6t4VtpNbsYb25ge3kntVM0ayKkKsULIAwVlJGcEHmvJv+G1fin/0APBn/gHc/wDyRQB9J/tl2lrYfsqeJrGxtobW0torCGCCGMJHEi3luFRVHCqAAABwAK5L/gnF/wAkQ1n/ALGSf/0mtq0/2kNbuvEv7Dtx4jvo4Y7vVdI0i9nSEERq8s9q7BQSSFyxxkk47msz/gnF/wAkQ1n/ALGSf/0mtqAPAP2cfinpE3ji8X47+KL3X/DQ01za22vifVbdLzzYtjrEwkCuI/OAfaMBmGfmwfobxd+0J8DrD4TeIPD3gHxTDpN2dIvItJt9N0i6tFiuHjcoYysKrGxkbO7IwTnPevz5r6//AGd/2X/APxE+DuheMdb1fxNb3+ofaPNjs7mBYl8u4liG0NCx+6gzknnP0oA5n9mX4peBJv8AhIP+Ggdd/wCEix9m/sX/AISG0n1fyP8AW+f5W5JPK3fud3TdtXrt45/xZ+zz8TvFPirVvE/gjwXDN4V1e+mv9EkhvbS3jeymcyQFYmkVo1MbJhCqlRwQMYr6G/4Yq+Fn/Qf8Z/8AgZbf/I9Y3wU+NfiqH4/WPwIXT9FPhrRbm80S2ujDL9teCxhlWJnfzNhciBNxCAHJwF4wAH7OPinQv2dvA954K+Md9/wjOv3upPqlvaeU95vtXiiiWTfbCRBl4ZRtJDfLnGCCfMv+CcX/ACW/Wf8AsW5//Sm2o/4KO/8AJb9G/wCxbg/9KbmvqD4Kfs9eC/hN4qufEfhzU/EF1d3Ni9k6X88LxhGeNyQEiQ7sxr3xgnigD1+iiigAooooAKKKKACviD4lfsifEnxL8RfEviOx1vwlHaarq91ewJNdXAkVJZmdQwEBAbDDOCRnua9G/bn+KXjv4a/8Id/whWu/2V/aP277X/okE3meX9n2f61Gxje/TGc89q8TsPit+1/f2NvfWNv4turS5iWaCeHwhE8cqMMq6sLbDKQQQRwQaAPqb9k34X6/8Jvh1qHhzxHeaZdXdzq8l6j2EjvGEaGFACXRDuzG3bGCOa8//ZN/Z68afCb4i6h4j8R6n4furS50iSyRLCeZ5A7TQuCQ8SDbiNu+ckcV4/8A8LL/AGyf+gb4z/8ACMj/APkaj/hZf7ZP/QN8Z/8AhGR//I1AHsHj79nrxpr/AO1RbfFSz1Pw/HosWr6betBLPMLnZbLAHAURFdx8psfNjkZI7ep/HT41+Ffg9/Y//CTafrV3/a/n/Z/7Ohifb5Xl7t2+RMZ81cYz0PTv8meAvjz8fP8Ahc/hjwh4v1+9tPtOt2Nrf2F5ottby+VLLGCrAwq67kfIIwcEEdjX2Z8Tfhb4E+JX9n/8JroX9q/2d5v2T/S54fL8zZv/ANU65zsTrnGOO9AHw18b/gp4qm0DxB8d11DRR4a1q5Gt21qZpftqQX06tErp5ewOBOm4ByBg4LcZ5/4Kfs9eNPiz4VufEfhzU/D9raW189k6X88ySF1SNyQEicbcSL3zkHivrL9pW98I3v7Pet/C3wJqumaprVpFZ6fY+H9OvVu78C2uYd0YhVmlZo0iYtkEgIxPQmuf/Yp1bSvhr8LNT0L4janZeDdWn1uW7hsdfnWwuJIGggRZVjmKsULI6hgMEowzkGgC7/wUd/5Iho3/AGMkH/pNc10H7KOt2vhr9jjSPEd9HNJaaVY6nezpCAZGSK6uXYKCQC2FOMkDPcV5/wDt8+N/BfiX4PaTY+HPF/h/WbuPxBDM8FhqUNxIqC3uAXKoxIXLKM9MketeDfA74peO5NQ8LfCR9dz4K1TUotLvNN+yQfvbW6uMXEfm7PNG4SyfMHDDdwRgYAPZvib/AMZg/wBn/wDCtP8AiUf8Il5v2/8A4SH9x5n2vZ5fleR5ucfZpN27bjK4zk48s/ZR0S68Nftj6R4cvpIZLvSr7U7Kd4STGzxWtyjFSQCVypxkA47Cvbfjp4T8VfBP+x/+Gb/DWtWP9s+f/bv9nWMuq7/J8v7Pu85ZfLx5s+Nu3dk5ztGPka18ZeN/DHxRu/GSXk2neMIr65luZprOMSR3Eu9Zw0TptVvncFSowTwBjgA9s/4KO/8AJb9G/wCxbg/9Kbmvv+vk39nHwtoX7RPge88a/GOx/wCEm1+y1J9Lt7vzXs9lqkUUqx7LYxocPNKdxBb5sZwAB9ZUAFFFFABRRRQAUUUUAfGf/BTT/mn3/cS/9ta9mtvHX/Ctf2QfDXjX+y/7V/s7w3pH+ifaPJ8zzEt4vv7Wxjfnoc4x714z/wAFNP8Amn3/AHEv/bWuz+Mn/KPOx/7FvQv/AEZaUAcZ/wANz/8AVLv/ACv/AP3PXpv7OP7SH/C4fHF54Z/4Qz+xPs2mvffaP7T+0btssSbNvlJjPm5znt054/Oavpn/AIJxf8lv1n/sW5//AEptqAD4yf8AKQyx/wCxk0L/ANF2lff9fAHxk/5SGWP/AGMmhf8Aou0r03/god4s8VeF/wDhBv8AhGfEutaJ9p/tD7R/Z19Lb+bt+zbd2xhuxubGemT60AfP9z46/wCFa/tfeJfGv9l/2r/Z3iTV/wDRPtHk+Z5j3EX39rYxvz0OcY96xv2jviv/AMLh8cWfib+wf7E+zaalj9n+2faN22WV9+7YmM+bjGO3Xnjufg/8N/EXh7xbo3xg+MGgQ3HgCeJ9Q1LUtSlh1BZxdQsIZJIQzyuzSzRHlCQTuOMEj3n/AIWX+xt/0DfBn/hGSf8AyNQBxn/DDH/VUf8Aygf/AHRXjNt4F/4Vr+194a8Ff2p/av8AZ3iTSP8AS/s/k+Z5j28v3NzYxvx1OcZ9q+rP2+fEOv8Ahr4PaTfeHNc1PRruTxBDC89hdvbyMht7glCyEErlVOOmQPSrv7Jvh7QPFPwX8K+N/E+h6ZrniqWWeaTW9RtEub93iu5ViczuDIWRURVO7KhFAxgUAe818NftUfs3/wDCO6R41+Lf/CZ/avN1Jr7+zf7M2Y+03ajZ5vmn7vm9dnO3oM8dn/wUO8WeKvC//CDf8Iz4l1rRPtP9ofaP7Ovpbfzdv2bbu2MN2NzYz0yfWvP/AIV6d8VtLvNF8e/GzUNa1H4Sy2wutQOr6v8A2laTRTQkWrPaeZI7/vpICAYyVbDHG3IAOZ/Zx/aQ/wCFPeB7zwz/AMIZ/bf2nUnvvtH9p/Z9u6KJNm3ynzjys5z36cc/TP7OP7SH/C4fHF54Z/4Qz+xPs2mvffaP7T+0btssSbNvlJjPm5znt0548G+Nfw1X4yeKrbxP+zz4V0y98K2tilhdyWEUGmRi9V5JHBim8pmby5YfnCkEEDPykD7Y8N+CPBfhq+e+8OeEPD+jXckRheew02G3kZCQShZFBK5VTjpkD0oA6CiiigAooooAKKKKAPjP/gpp/wA0+/7iX/trXufhvwVpXxE/ZV8KeDtbuL23sNQ8N6V5slm6rKvlxwSjaWVh95BnIPGfrXM/tg/BTxV8Yf8AhFv+EZ1DRbT+yPtf2j+0ZpU3eb5O3bsjfOPKbOcdR17fP/8AwxV8U/8AoP8Agz/wMuf/AJHoA9m/4Yq+Fn/Qf8Z/+Blt/wDI9d18FP2evBfwm8VXPiPw5qfiC6u7mxeydL+eF4wjPG5ICRId2Y174wTxXy//AMMVfFP/AKD/AIM/8DLn/wCR6P8Ahir4p/8AQf8ABn/gZc//ACPQAfGT/lIZY/8AYyaF/wCi7Suz/wCCmn/NPv8AuJf+2tZnw1/ZE+JPhr4i+GvEd9rfhKS00rV7W9nSG6uDIyRTK7BQYAC2FOMkDPcV7B+2D8FPFXxh/wCEW/4RnUNFtP7I+1/aP7RmlTd5vk7duyN848ps5x1HXsAfI3iX9oXxpr/wai+Fd5pnh+PRYrG0slnigmFzstjGUJYyldx8pc/Ljk4A7eP19s/s7/sv+Pvh38YtC8Y63q/hm4sNP+0ebHZ3M7St5lvLENoaFR95xnJHGfpXQftZfs9eNPiz8RdP8R+HNT8P2tpbaRHZOl/PMkhdZpnJASJxtxIvfOQeKAOF+HHjXVf2s9cm+HPxGt7LStJ062bW4ZtARobhp42WFVZpmlUptuHJAUHIXnGQdTTPihr/AMG/jbov7PXhiz0y88K2mr2NlHd6jG8l+UvHjmlJdHSPcGuHC/u8ABcg8k9N+yb+z140+E3xF1DxH4j1Pw/dWlzpElkiWE8zyB2mhcEh4kG3Ebd85I4r3/4laJdeJfh14l8OWMkMd3qukXVlA8xIjV5YWRSxAJC5YZwCcdjQB8p/8FNP+aff9xL/ANta5P4OfFDX/jIvh39nrxPZ6ZZ+FbuxSyku9OjeO/CWcHnREO7vHuLW6Bv3eCC2AOCPef2Pvgp4q+D3/CU/8JNqGi3f9r/ZPs/9nTSvt8rzt27fGmM+auMZ6Hp39/oA4b4KfC/QPhN4VufDnhy81O6tLm+e9d7+RHkDskaEAoiDbiNe2ck814z+yb+0L40+LPxF1Dw54j0zw/a2ltpEl6j2EEySF1mhQAl5XG3Ejds5A5r6fooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/Z
diff --git a/tests/Output/samples/json b/tests/Output/samples/json
new file mode 100644
index 000000000..56837ea1b
--- /dev/null
+++ b/tests/Output/samples/json
@@ -0,0 +1 @@
+[[256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256],[256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256],[256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256],[256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256],[256,256,256,256,2052,2052,2052,2052,2052,2052,2052,8,2112,2050,2,2,2050,8,2052,2052,2052,2052,2052,2052,2052,256,256,256,256],[256,256,256,256,2052,4,4,4,4,4,2052,8,64,2050,2,2,2050,8,2052,4,4,4,4,4,2052,256,256,256,256],[256,256,256,256,2052,4,3072,3072,3072,4,2052,8,2112,2,2050,2,2050,8,2052,4,3072,3072,3072,4,2052,256,256,256,256],[256,256,256,256,2052,4,3072,3072,3072,4,2052,8,2112,2,2,2050,2,8,2052,4,3072,3072,3072,4,2052,256,256,256,256],[256,256,256,256,2052,4,3072,3072,3072,4,2052,8,2112,2050,2050,2,2,8,2052,4,3072,3072,3072,4,2052,256,256,256,256],[256,256,256,256,2052,4,4,4,4,4,2052,8,64,2,2,2,2,8,2052,4,4,4,4,4,2052,256,256,256,256],[256,256,256,256,2052,2052,2052,2052,2052,2052,2052,8,2080,32,2080,32,2080,8,2052,2052,2052,2052,2052,2052,2052,256,256,256,256],[256,256,256,256,8,8,8,8,8,8,8,8,64,2050,2050,2,2,8,8,8,8,8,8,8,8,256,256,256,256],[256,256,256,256,2112,2112,2112,2112,64,64,2080,64,2112,2,2050,2,2,2112,64,64,2112,2112,2112,64,2112,256,256,256,256],[256,256,256,256,2050,2,2,2050,2050,2050,32,2050,2,2,2050,2,2050,2,2,2050,2,2050,2050,2,2050,256,256,256,256],[256,256,256,256,2050,2,2050,2,2050,2050,2080,2,2,2,2050,2,2050,2050,2050,2050,2050,2,2,2050,2050,256,256,256,256],[256,256,256,256,2050,2,2050,2050,2,2,32,2050,2050,2,2050,2,2050,2050,2,2,2,2050,2,2050,2,256,256,256,256],[256,256,256,256,2,2050,2050,2,2050,2,2080,2,2,2050,2050,2050,2,2050,2,2,2050,2050,2,2050,2,256,256,256,256],[256,256,256,256,8,8,8,8,8,8,8,8,2049,2,2050,2,2,2050,2,2050,2,2050,2,2050,2,256,256,256,256],[256,256,256,256,2052,2052,2052,2052,2052,2052,2052,8,64,2,2050,2,2,2050,2050,2,2050,2050,2050,2,2,256,256,256,256],[256,256,256,256,2052,4,4,4,4,4,2052,8,64,2050,2,2050,2050,2050,2050,2,2,2050,2050,2,2,256,256,256,256],[256,256,256,256,2052,4,3072,3072,3072,4,2052,8,64,2050,2050,2050,2,2,2050,2,2,2,2050,2050,2050,256,256,256,256],[256,256,256,256,2052,4,3072,3072,3072,4,2052,8,2112,2050,2,2,2,2050,2,2,2050,2050,2,2050,2,256,256,256,256],[256,256,256,256,2052,4,3072,3072,3072,4,2052,8,2112,2,2050,2050,2,2050,2,2,2050,2,2050,2,2,256,256,256,256],[256,256,256,256,2052,4,4,4,4,4,2052,8,2112,2050,2050,2050,2050,2,2050,2,2050,2050,2,2,2050,256,256,256,256],[256,256,256,256,2052,2052,2052,2052,2052,2052,2052,8,2112,2050,2,2050,2050,2,2,2050,2,2,2,2,2,256,256,256,256],[256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256],[256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256],[256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256],[256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256]]
diff --git a/tests/Output/samples/png b/tests/Output/samples/png
new file mode 100644
index 000000000..34148d735
--- /dev/null
+++ b/tests/Output/samples/png
@@ -0,0 +1 @@
+data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAACRCAIAAABMus10AAAABnRSTlMA/wD/AP83WBt9AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACd0lEQVR4nO3dQW7jIABA0fFo7n/ldFnJC0sMBvu3762bJtUXMnUwHJ/P5w8pf5/+AAzTrEezHs16NOvRrEezHs16NOvRrEezHs16NOvRrEezHs16NOvRrEeznn8zLz6O467Pce20aOX6fa9XuJxeO/SbbzSzDMc469GsR7MezXqm5iAnNy5vHZplrJs4bPuLhhhnPZr1aNajWc+dc5CToavu0NV+6F7GU/OIdQ8cGWc9mvVo1qNZz8I5yFO2TUmeYpz1aNajWY9mPT9hDjKzPKTIOOvRrEezHs16Fs5B1l38n5pWvGQ6Y5z1aNajWY9mPXfOQbY9VDKzHmToq5ltf9EQ46xHsx7NejTrOV7yv/0M38Xwdpr1aNajWc9j+4PcuIvHzKO6626LrFsaa5z1aNajWY9mPfv2BzldhGd2AJm5gM9MOp7a0OzEOOvRrEezHs169u0PMnQB3/ZA7Utumgwxzno069GsR7Oefc/mzkwrtq34uHGrtJnffM0469GsR7MezXqm5iAzx7hse3pl3eKRpxhnPZr1aNajWc9j58XM3DXYtle79SDcQ7MezXo060mem7ttecg717AYZz2a9WjWo1lP8tzc6x9ed7fCfRD+k2Y9mvVo1pM8N3fmfbftALJuHa1x1qNZj2Y9mvUkz6y78fJ+4+LXbef1Gmc9mvVo1qNZT3IOcjLzeM6697UehG+a9WjWo1lP8tzck3WLR2Yez5n54WvGWY9mPZr1aNaTPDf32szK0XW3NnwX86tp1qNZj2Y9P+Hc3N/GOOvRrEezHs16NOvRrEezHs16NOvRrEezHs16NOvRrEezHs16NOvRrEezni+wifc/oOyB/wAAAABJRU5ErkJggg==
diff --git a/tests/Output/samples/svg b/tests/Output/samples/svg
new file mode 100644
index 000000000..10d895a93
--- /dev/null
+++ b/tests/Output/samples/svg
@@ -0,0 +1 @@
+data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJxci1zdmcgIiBzdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogYXV0bzsiIHZpZXdCb3g9IjAgMCAyOSAyOSI+DQo8ZGVmcz48c3R5bGU+cmVjdHtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlc308L3N0eWxlPjwvZGVmcz4NCjxwYXRoIGNsYXNzPSJxci0yICIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0iI2ZmZiIgZmlsbC1vcGFjaXR5PSIxIiBkPSJNMTQgNCBoMiB2MSBoLTJaIE0xNCA1IGgyIHYxIGgtMlogTTEzIDYgaDEgdjEgaC0xWiBNMTUgNiBoMSB2MSBoLTFaIE0xMyA3IGgyIHYxIGgtMlogTTE2IDcgaDEgdjEgaC0xWiBNMTUgOCBoMiB2MSBoLTJaIE0xMyA5IGg0IHYxIGgtNFogTTE1IDExIGgyIHYxIGgtMlogTTEzIDEyIGgxIHYxIGgtMVogTTE1IDEyIGgyIHYxIGgtMlogTTUgMTMgaDIgdjEgaC0yWiBNMTIgMTMgaDIgdjEgaC0yWiBNMTUgMTMgaDEgdjEgaC0xWiBNMTcgMTMgaDIgdjEgaC0yWiBNMjAgMTMgaDEgdjEgaC0xWiBNMjMgMTMgaDEgdjEgaC0xWiBNNSAxNCBoMSB2MSBoLTFaIE03IDE0IGgxIHYxIGgtMVogTTExIDE0IGgzIHYxIGgtM1ogTTE1IDE0IGgxIHYxIGgtMVogTTIxIDE0IGgyIHYxIGgtMlogTTUgMTUgaDEgdjEgaC0xWiBNOCAxNSBoMiB2MSBoLTJaIE0xMyAxNSBoMSB2MSBoLTFaIE0xNSAxNSBoMSB2MSBoLTFaIE0xOCAxNSBoMyB2MSBoLTNaIE0yMiAxNSBoMSB2MSBoLTFaIE0yNCAxNSBoMSB2MSBoLTFaIE00IDE2IGgxIHYxIGgtMVogTTcgMTYgaDEgdjEgaC0xWiBNOSAxNiBoMSB2MSBoLTFaIE0xMSAxNiBoMiB2MSBoLTJaIE0xNiAxNiBoMSB2MSBoLTFaIE0xOCAxNiBoMiB2MSBoLTJaIE0yMiAxNiBoMSB2MSBoLTFaIE0yNCAxNiBoMSB2MSBoLTFaIE0xMyAxNyBoMSB2MSBoLTFaIE0xNSAxNyBoMiB2MSBoLTJaIE0xOCAxNyBoMSB2MSBoLTFaIE0yMCAxNyBoMSB2MSBoLTFaIE0yMiAxNyBoMSB2MSBoLTFaIE0yNCAxNyBoMSB2MSBoLTFaIE0xMyAxOCBoMSB2MSBoLTFaIE0xNSAxOCBoMiB2MSBoLTJaIE0xOSAxOCBoMSB2MSBoLTFaIE0yMyAxOCBoMiB2MSBoLTJaIE0xNCAxOSBoMSB2MSBoLTFaIE0xOSAxOSBoMiB2MSBoLTJaIE0yMyAxOSBoMiB2MSBoLTJaIE0xNiAyMCBoMiB2MSBoLTJaIE0xOSAyMCBoMyB2MSBoLTNaIE0xNCAyMSBoMyB2MSBoLTNaIE0xOCAyMSBoMiB2MSBoLTJaIE0yMiAyMSBoMSB2MSBoLTFaIE0yNCAyMSBoMSB2MSBoLTFaIE0xMyAyMiBoMSB2MSBoLTFaIE0xNiAyMiBoMSB2MSBoLTFaIE0xOCAyMiBoMiB2MSBoLTJaIE0yMSAyMiBoMSB2MSBoLTFaIE0yMyAyMiBoMiB2MSBoLTJaIE0xNyAyMyBoMSB2MSBoLTFaIE0xOSAyMyBoMSB2MSBoLTFaIE0yMiAyMyBoMiB2MSBoLTJaIE0xNCAyNCBoMSB2MSBoLTFaIE0xNyAyNCBoMiB2MSBoLTJaIE0yMCAyNCBoNSB2MSBoLTVaICIgLz48cGF0aCBjbGFzcz0icXItNCAiIHN0cm9rZT0idHJhbnNwYXJlbnQiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iMSIgZD0iTTUgNSBoNSB2MSBoLTVaIE0xOSA1IGg1IHYxIGgtNVogTTUgNiBoMSB2MSBoLTFaIE05IDYgaDEgdjEgaC0xWiBNMTkgNiBoMSB2MSBoLTFaIE0yMyA2IGgxIHYxIGgtMVogTTUgNyBoMSB2MSBoLTFaIE05IDcgaDEgdjEgaC0xWiBNMTkgNyBoMSB2MSBoLTFaIE0yMyA3IGgxIHYxIGgtMVogTTUgOCBoMSB2MSBoLTFaIE05IDggaDEgdjEgaC0xWiBNMTkgOCBoMSB2MSBoLTFaIE0yMyA4IGgxIHYxIGgtMVogTTUgOSBoNSB2MSBoLTVaIE0xOSA5IGg1IHYxIGgtNVogTTUgMTkgaDUgdjEgaC01WiBNNSAyMCBoMSB2MSBoLTFaIE05IDIwIGgxIHYxIGgtMVogTTUgMjEgaDEgdjEgaC0xWiBNOSAyMSBoMSB2MSBoLTFaIE01IDIyIGgxIHYxIGgtMVogTTkgMjIgaDEgdjEgaC0xWiBNNSAyMyBoNSB2MSBoLTVaICIgLz48cGF0aCBjbGFzcz0icXItOCAiIHN0cm9rZT0idHJhbnNwYXJlbnQiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iMSIgZD0iTTExIDQgaDEgdjEgaC0xWiBNMTcgNCBoMSB2MSBoLTFaIE0xMSA1IGgxIHYxIGgtMVogTTE3IDUgaDEgdjEgaC0xWiBNMTEgNiBoMSB2MSBoLTFaIE0xNyA2IGgxIHYxIGgtMVogTTExIDcgaDEgdjEgaC0xWiBNMTcgNyBoMSB2MSBoLTFaIE0xMSA4IGgxIHYxIGgtMVogTTE3IDggaDEgdjEgaC0xWiBNMTEgOSBoMSB2MSBoLTFaIE0xNyA5IGgxIHYxIGgtMVogTTExIDEwIGgxIHYxIGgtMVogTTE3IDEwIGgxIHYxIGgtMVogTTQgMTEgaDggdjEgaC04WiBNMTcgMTEgaDggdjEgaC04WiBNNCAxNyBoOCB2MSBoLThaIE0xMSAxOCBoMSB2MSBoLTFaIE0xMSAxOSBoMSB2MSBoLTFaIE0xMSAyMCBoMSB2MSBoLTFaIE0xMSAyMSBoMSB2MSBoLTFaIE0xMSAyMiBoMSB2MSBoLTFaIE0xMSAyMyBoMSB2MSBoLTFaIE0xMSAyNCBoMSB2MSBoLTFaICIgLz48cGF0aCBjbGFzcz0icXItMzIgIiBzdHJva2U9InRyYW5zcGFyZW50IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9IjEiIGQ9Ik0xMyAxMCBoMSB2MSBoLTFaIE0xNSAxMCBoMSB2MSBoLTFaIE0xMCAxMyBoMSB2MSBoLTFaIE0xMCAxNSBoMSB2MSBoLTFaICIgLz48cGF0aCBjbGFzcz0icXItNjQgIiBzdHJva2U9InRyYW5zcGFyZW50IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9IjEiIGQ9Ik0xMiA1IGgxIHYxIGgtMVogTTEyIDkgaDEgdjEgaC0xWiBNMTIgMTEgaDEgdjEgaC0xWiBNOCAxMiBoMiB2MSBoLTJaIE0xMSAxMiBoMSB2MSBoLTFaIE0xOCAxMiBoMiB2MSBoLTJaIE0yMyAxMiBoMSB2MSBoLTFaIE0xMiAxOCBoMSB2MSBoLTFaIE0xMiAxOSBoMSB2MSBoLTFaIE0xMiAyMCBoMSB2MSBoLTFaICIgLz48cGF0aCBjbGFzcz0icXItMjU2ICIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0iI2ZmZiIgZmlsbC1vcGFjaXR5PSIxIiBkPSJNMCAwIGgyOSB2MSBoLTI5WiBNMCAxIGgyOSB2MSBoLTI5WiBNMCAyIGgyOSB2MSBoLTI5WiBNMCAzIGgyOSB2MSBoLTI5WiBNMCA0IGg0IHYxIGgtNFogTTI1IDQgaDQgdjEgaC00WiBNMCA1IGg0IHYxIGgtNFogTTI1IDUgaDQgdjEgaC00WiBNMCA2IGg0IHYxIGgtNFogTTI1IDYgaDQgdjEgaC00WiBNMCA3IGg0IHYxIGgtNFogTTI1IDcgaDQgdjEgaC00WiBNMCA4IGg0IHYxIGgtNFogTTI1IDggaDQgdjEgaC00WiBNMCA5IGg0IHYxIGgtNFogTTI1IDkgaDQgdjEgaC00WiBNMCAxMCBoNCB2MSBoLTRaIE0yNSAxMCBoNCB2MSBoLTRaIE0wIDExIGg0IHYxIGgtNFogTTI1IDExIGg0IHYxIGgtNFogTTAgMTIgaDQgdjEgaC00WiBNMjUgMTIgaDQgdjEgaC00WiBNMCAxMyBoNCB2MSBoLTRaIE0yNSAxMyBoNCB2MSBoLTRaIE0wIDE0IGg0IHYxIGgtNFogTTI1IDE0IGg0IHYxIGgtNFogTTAgMTUgaDQgdjEgaC00WiBNMjUgMTUgaDQgdjEgaC00WiBNMCAxNiBoNCB2MSBoLTRaIE0yNSAxNiBoNCB2MSBoLTRaIE0wIDE3IGg0IHYxIGgtNFogTTI1IDE3IGg0IHYxIGgtNFogTTAgMTggaDQgdjEgaC00WiBNMjUgMTggaDQgdjEgaC00WiBNMCAxOSBoNCB2MSBoLTRaIE0yNSAxOSBoNCB2MSBoLTRaIE0wIDIwIGg0IHYxIGgtNFogTTI1IDIwIGg0IHYxIGgtNFogTTAgMjEgaDQgdjEgaC00WiBNMjUgMjEgaDQgdjEgaC00WiBNMCAyMiBoNCB2MSBoLTRaIE0yNSAyMiBoNCB2MSBoLTRaIE0wIDIzIGg0IHYxIGgtNFogTTI1IDIzIGg0IHYxIGgtNFogTTAgMjQgaDQgdjEgaC00WiBNMjUgMjQgaDQgdjEgaC00WiBNMCAyNSBoMjkgdjEgaC0yOVogTTAgMjYgaDI5IHYxIGgtMjlaIE0wIDI3IGgyOSB2MSBoLTI5WiBNMCAyOCBoMjkgdjEgaC0yOVogIiAvPjxwYXRoIGNsYXNzPSJxci0yMDQ5ICIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIxIiBkPSJNMTIgMTcgaDEgdjEgaC0xWiAiIC8+PHBhdGggY2xhc3M9InFyLTIwNTAgIiBzdHJva2U9InRyYW5zcGFyZW50IiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9IjEiIGQ9Ik0xMyA0IGgxIHYxIGgtMVogTTE2IDQgaDEgdjEgaC0xWiBNMTMgNSBoMSB2MSBoLTFaIE0xNiA1IGgxIHYxIGgtMVogTTE0IDYgaDEgdjEgaC0xWiBNMTYgNiBoMSB2MSBoLTFaIE0xNSA3IGgxIHYxIGgtMVogTTEzIDggaDIgdjEgaC0yWiBNMTMgMTEgaDIgdjEgaC0yWiBNMTQgMTIgaDEgdjEgaC0xWiBNNCAxMyBoMSB2MSBoLTFaIE03IDEzIGgzIHYxIGgtM1ogTTExIDEzIGgxIHYxIGgtMVogTTE0IDEzIGgxIHYxIGgtMVogTTE2IDEzIGgxIHYxIGgtMVogTTE5IDEzIGgxIHYxIGgtMVogTTIxIDEzIGgyIHYxIGgtMlogTTI0IDEzIGgxIHYxIGgtMVogTTQgMTQgaDEgdjEgaC0xWiBNNiAxNCBoMSB2MSBoLTFaIE04IDE0IGgyIHYxIGgtMlogTTE0IDE0IGgxIHYxIGgtMVogTTE2IDE0IGg1IHYxIGgtNVogTTIzIDE0IGgyIHYxIGgtMlogTTQgMTUgaDEgdjEgaC0xWiBNNiAxNSBoMiB2MSBoLTJaIE0xMSAxNSBoMiB2MSBoLTJaIE0xNCAxNSBoMSB2MSBoLTFaIE0xNiAxNSBoMiB2MSBoLTJaIE0yMSAxNSBoMSB2MSBoLTFaIE0yMyAxNSBoMSB2MSBoLTFaIE01IDE2IGgyIHYxIGgtMlogTTggMTYgaDEgdjEgaC0xWiBNMTMgMTYgaDMgdjEgaC0zWiBNMTcgMTYgaDEgdjEgaC0xWiBNMjAgMTYgaDIgdjEgaC0yWiBNMjMgMTYgaDEgdjEgaC0xWiBNMTQgMTcgaDEgdjEgaC0xWiBNMTcgMTcgaDEgdjEgaC0xWiBNMTkgMTcgaDEgdjEgaC0xWiBNMjEgMTcgaDEgdjEgaC0xWiBNMjMgMTcgaDEgdjEgaC0xWiBNMTQgMTggaDEgdjEgaC0xWiBNMTcgMTggaDIgdjEgaC0yWiBNMjAgMTggaDMgdjEgaC0zWiBNMTMgMTkgaDEgdjEgaC0xWiBNMTUgMTkgaDQgdjEgaC00WiBNMjEgMTkgaDIgdjEgaC0yWiBNMTMgMjAgaDMgdjEgaC0zWiBNMTggMjAgaDEgdjEgaC0xWiBNMjIgMjAgaDMgdjEgaC0zWiBNMTMgMjEgaDEgdjEgaC0xWiBNMTcgMjEgaDEgdjEgaC0xWiBNMjAgMjEgaDIgdjEgaC0yWiBNMjMgMjEgaDEgdjEgaC0xWiBNMTQgMjIgaDIgdjEgaC0yWiBNMTcgMjIgaDEgdjEgaC0xWiBNMjAgMjIgaDEgdjEgaC0xWiBNMjIgMjIgaDEgdjEgaC0xWiBNMTMgMjMgaDQgdjEgaC00WiBNMTggMjMgaDEgdjEgaC0xWiBNMjAgMjMgaDIgdjEgaC0yWiBNMjQgMjMgaDEgdjEgaC0xWiBNMTMgMjQgaDEgdjEgaC0xWiBNMTUgMjQgaDIgdjEgaC0yWiBNMTkgMjQgaDEgdjEgaC0xWiAiIC8+PHBhdGggY2xhc3M9InFyLTIwNTIgIiBzdHJva2U9InRyYW5zcGFyZW50IiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9IjEiIGQ9Ik00IDQgaDcgdjEgaC03WiBNMTggNCBoNyB2MSBoLTdaIE00IDUgaDEgdjEgaC0xWiBNMTAgNSBoMSB2MSBoLTFaIE0xOCA1IGgxIHYxIGgtMVogTTI0IDUgaDEgdjEgaC0xWiBNNCA2IGgxIHYxIGgtMVogTTEwIDYgaDEgdjEgaC0xWiBNMTggNiBoMSB2MSBoLTFaIE0yNCA2IGgxIHYxIGgtMVogTTQgNyBoMSB2MSBoLTFaIE0xMCA3IGgxIHYxIGgtMVogTTE4IDcgaDEgdjEgaC0xWiBNMjQgNyBoMSB2MSBoLTFaIE00IDggaDEgdjEgaC0xWiBNMTAgOCBoMSB2MSBoLTFaIE0xOCA4IGgxIHYxIGgtMVogTTI0IDggaDEgdjEgaC0xWiBNNCA5IGgxIHYxIGgtMVogTTEwIDkgaDEgdjEgaC0xWiBNMTggOSBoMSB2MSBoLTFaIE0yNCA5IGgxIHYxIGgtMVogTTQgMTAgaDcgdjEgaC03WiBNMTggMTAgaDcgdjEgaC03WiBNNCAxOCBoNyB2MSBoLTdaIE00IDE5IGgxIHYxIGgtMVogTTEwIDE5IGgxIHYxIGgtMVogTTQgMjAgaDEgdjEgaC0xWiBNMTAgMjAgaDEgdjEgaC0xWiBNNCAyMSBoMSB2MSBoLTFaIE0xMCAyMSBoMSB2MSBoLTFaIE00IDIyIGgxIHYxIGgtMVogTTEwIDIyIGgxIHYxIGgtMVogTTQgMjMgaDEgdjEgaC0xWiBNMTAgMjMgaDEgdjEgaC0xWiBNNCAyNCBoNyB2MSBoLTdaICIgLz48cGF0aCBjbGFzcz0icXItMjA4MCAiIHN0cm9rZT0idHJhbnNwYXJlbnQiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iMSIgZD0iTTEyIDEwIGgxIHYxIGgtMVogTTE0IDEwIGgxIHYxIGgtMVogTTE2IDEwIGgxIHYxIGgtMVogTTEwIDEyIGgxIHYxIGgtMVogTTEwIDE0IGgxIHYxIGgtMVogTTEwIDE2IGgxIHYxIGgtMVogIiAvPjxwYXRoIGNsYXNzPSJxci0yMTEyICIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIxIiBkPSJNMTIgNCBoMSB2MSBoLTFaIE0xMiA2IGgxIHYxIGgtMVogTTEyIDcgaDEgdjEgaC0xWiBNMTIgOCBoMSB2MSBoLTFaIE00IDEyIGg0IHYxIGgtNFogTTEyIDEyIGgxIHYxIGgtMVogTTE3IDEyIGgxIHYxIGgtMVogTTIwIDEyIGgzIHYxIGgtM1ogTTI0IDEyIGgxIHYxIGgtMVogTTEyIDIxIGgxIHYxIGgtMVogTTEyIDIyIGgxIHYxIGgtMVogTTEyIDIzIGgxIHYxIGgtMVogTTEyIDI0IGgxIHYxIGgtMVogIiAvPjxwYXRoIGNsYXNzPSJxci0zMDcyICIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIxIiBkPSJNNiA2IGgzIHYxIGgtM1ogTTIwIDYgaDMgdjEgaC0zWiBNNiA3IGgzIHYxIGgtM1ogTTIwIDcgaDMgdjEgaC0zWiBNNiA4IGgzIHYxIGgtM1ogTTIwIDggaDMgdjEgaC0zWiBNNiAyMCBoMyB2MSBoLTNaIE02IDIxIGgzIHYxIGgtM1ogTTYgMjIgaDMgdjEgaC0zWiAiIC8+PC9zdmc+DQo=
diff --git a/tests/Output/samples/text b/tests/Output/samples/text
new file mode 100644
index 000000000..23a7098f9
--- /dev/null
+++ b/tests/Output/samples/text
@@ -0,0 +1,29 @@
+⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕🔴🔴🔴🔴🔴🔴🔴⭕🔴🔴⭕⭕🔴⭕🔴🔴🔴🔴🔴🔴🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕🔴⭕⭕🔴⭕⭕🔴⭕🔴⭕⭕⭕⭕⭕🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕🔴⭕🔴⭕🔴⭕🔴⭕🔴🔴🔴⭕🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕🔴⭕⭕🔴⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕🔴🔴🔴⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴🔴🔴🔴🔴🔴🔴⭕🔴⭕🔴⭕🔴⭕🔴🔴🔴🔴🔴🔴🔴⭕⭕⭕⭕
+⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕🔴🔴⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕🔴🔴🔴🔴⭕⭕🔴⭕🔴⭕🔴⭕⭕🔴⭕⭕🔴🔴🔴⭕🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕⭕🔴🔴🔴⭕🔴⭕⭕🔴⭕🔴⭕⭕🔴⭕🔴🔴⭕🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕🔴⭕🔴🔴🔴⭕⭕⭕🔴⭕🔴🔴🔴🔴🔴⭕⭕🔴🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕🔴🔴⭕⭕⭕🔴🔴⭕🔴⭕🔴🔴⭕⭕⭕🔴⭕🔴⭕⭕⭕⭕⭕
+⭕⭕⭕⭕⭕🔴🔴⭕🔴⭕🔴⭕⭕🔴🔴🔴⭕🔴⭕⭕🔴🔴⭕🔴⭕⭕⭕⭕⭕
+⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕🔴⭕🔴⭕⭕🔴⭕🔴⭕🔴⭕🔴⭕⭕⭕⭕⭕
+⭕⭕⭕⭕🔴🔴🔴🔴🔴🔴🔴⭕⭕⭕🔴⭕⭕🔴🔴⭕🔴🔴🔴⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕🔴⭕⭕🔴⭕🔴🔴🔴🔴⭕⭕🔴🔴⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕⭕🔴🔴🔴⭕⭕🔴⭕⭕⭕🔴🔴🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕🔴🔴⭕⭕⭕🔴⭕⭕🔴🔴⭕🔴⭕⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕🔴⭕🔴🔴⭕🔴⭕⭕🔴⭕🔴⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕🔴⭕🔴🔴🔴🔴🔴⭕🔴⭕🔴🔴⭕⭕🔴⭕⭕⭕⭕
+⭕⭕⭕⭕🔴🔴🔴🔴🔴🔴🔴⭕🔴🔴⭕🔴🔴⭕⭕🔴⭕⭕⭕⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕
+⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕
diff --git a/tests/QRCodeReaderTest.php b/tests/QRCodeReaderTest.php
new file mode 100644
index 000000000..d5230b2e4
--- /dev/null
+++ b/tests/QRCodeReaderTest.php
@@ -0,0 +1,135 @@
+
+ * @copyright 2021 Smiley
+ * @license MIT
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCodeTest;
+
+use chillerlan\Settings\SettingsContainerInterface;
+use Exception;
+use chillerlan\QRCode\Common\{EccLevel, Mode, Version};
+use chillerlan\QRCode\{QRCode, QROptions, QRCodeReader};
+use PHPUnit\Framework\TestCase;
+use function extension_loaded, range, str_repeat, substr;
+
+/**
+ * Tests the QR Code reader
+ */
+class QRCodeReaderTest extends TestCase{
+
+ // https://www.bobrosslipsum.com/
+ protected const loremipsum = 'Just let this happen. We just let this flow right out of our minds. '
+ .'Anyone can paint. We touch the canvas, the canvas takes what it wants. From all of us here, '
+ .'I want to wish you happy painting and God bless, my friends. A tree cannot be straight if it has a crooked trunk. '
+ .'You have to make almighty decisions when you\'re the creator. I guess that would be considered a UFO. '
+ .'A big cotton ball in the sky. I\'m gonna add just a tiny little amount of Prussian Blue. '
+ .'They say everything looks better with odd numbers of things. But sometimes I put even numbers—just '
+ .'to upset the critics. We\'ll lay all these little funky little things in there. ';
+
+ private SettingsContainerInterface $options;
+
+ protected function setUp():void{
+ $this->options = new QROptions;
+ }
+
+ public function qrCodeProvider():array{
+ return [
+ 'helloworld' => ['hello_world.png', 'Hello world!'],
+ // covers mirroring
+ 'mirrored' => ['hello_world_mirrored.png', 'Hello world!'],
+ // data modes
+ 'byte' => ['byte.png', 'https://smiley.codes/qrcode/'],
+ 'numeric' => ['numeric.png', '123456789012345678901234567890'],
+ 'alphanum' => ['alphanum.png', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 $%*+-./:'],
+ 'kanji' => ['kanji.png', '茗荷茗荷茗荷茗荷'],
+ // covers most of ReedSolomonDecoder
+ 'damaged' => ['damaged.png', 'https://smiley.codes/qrcode/'],
+ // covers Binarizer::getHistogramBlackMatrix()
+ 'smol' => ['smol.png', 'https://smiley.codes/qrcode/'],
+ 'tilted' => ['tilted.png', 'Hello world!'], // tilted 22° CCW
+ 'rotated' => ['rotated.png', 'Hello world!'], // rotated 90° CW
+ ];
+ }
+
+ /**
+ * @dataProvider qrCodeProvider
+ */
+ public function testReaderGD(string $img, string $expected):void{
+ $this->options->useImagickIfAvailable = false;
+
+ $reader = new QRCodeReader($this->options);
+
+ $this::assertSame($expected, (string)$reader->readFile(__DIR__.'/qrcodes/'.$img));
+ }
+
+ /**
+ * @dataProvider qrCodeProvider
+ */
+ public function testReaderImagick(string $img, string $expected):void{
+
+ if(!extension_loaded('imagick')){
+ $this::markTestSkipped('imagick not installed');
+ }
+
+ $this->options->useImagickIfAvailable = true;
+
+ $reader = new QRCodeReader($this->options);
+
+ $this::assertSame($expected, (string)$reader->readFile(__DIR__.'/qrcodes/'.$img));
+ }
+
+ public function dataTestProvider():array{
+ $data = [];
+ $str = str_repeat($this::loremipsum, 5);
+
+ foreach(range(1, 40) as $v){
+ $version = new Version($v);
+
+ foreach(EccLevel::MODES as $ecc => $_){
+ $eccLevel = new EccLevel($ecc);
+
+ $data['version: '.$version.$eccLevel] = [
+ $version,
+ $eccLevel,
+ /** @phan-suppress-next-line PhanTypeMismatchArgumentNullableInternal */
+ substr($str, 0, $version->getMaxLengthForMode(Mode::DATA_BYTE, $eccLevel))
+ ];
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * @dataProvider dataTestProvider
+ */
+ public function testReadData(Version $version, EccLevel $ecc, string $expected):void{
+
+# $this->options->imageTransparent = false;
+ $this->options->eccLevel = $ecc->getLevel();
+ $this->options->version = $version->getVersionNumber();
+ $this->options->imageBase64 = false;
+ $this->options->scale = 1; // what's interesting is that a smaller scale seems to produce fewer reader errors???
+ $this->options->useImagickIfAvailable = true;
+
+ try{
+ $imagedata = (new QRCode($this->options))->render($expected);
+ $result = (new QRCodeReader($this->options))->readBlob($imagedata);
+ }
+ catch(Exception $e){
+ $this::markTestSkipped($version.$ecc.': '.$e->getMessage());
+ }
+
+ $this::assertSame($expected, $result->getText());
+ $this::assertSame($version->getVersionNumber(), $result->getVersion()->getVersionNumber());
+ $this::assertSame($ecc->getLevel(), $result->getEccLevel()->getLevel());
+ }
+
+}
diff --git a/tests/QRCodeTest.php b/tests/QRCodeTest.php
new file mode 100755
index 000000000..21e41f5d3
--- /dev/null
+++ b/tests/QRCodeTest.php
@@ -0,0 +1,99 @@
+
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeTest;
+
+use chillerlan\QRCode\{QROptions, QRCode};
+use chillerlan\QRCode\Data\QRCodeDataException;
+use chillerlan\QRCode\Output\QRCodeOutputException;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * Tests basic functions of the QRCode class
+ */
+class QRCodeTest extends TestCase{
+
+ /** @internal */
+ protected QRCode $qrcode;
+ /** @internal */
+ protected QROptions $options;
+
+ /**
+ * invoke test instances
+ *
+ * @internal
+ */
+ protected function setUp():void{
+ $this->qrcode = new QRCode;
+ $this->options = new QROptions;
+ }
+
+ /**
+ * isNumber() should pass on any number and fail on anything else
+ */
+ public function testIsNumber():void{
+ $this::assertTrue($this->qrcode->isNumber('0123456789'));
+
+ $this::assertFalse($this->qrcode->isNumber('ABC123'));
+ }
+
+ /**
+ * isAlphaNum() should pass on the 45 defined characters and fail on anything else (e.g. lowercase)
+ */
+ public function testIsAlphaNum():void{
+ $this::assertTrue($this->qrcode->isAlphaNum('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 $%*+-./:'));
+
+ $this::assertFalse($this->qrcode->isAlphaNum('abc'));
+ }
+
+ /**
+ * isKanji() should pass on Kanji/SJIS characters and fail on everything else
+ */
+ public function testIsKanji():void{
+ $this::assertTrue($this->qrcode->isKanji('茗荷'));
+
+ $this::assertFalse($this->qrcode->isKanji('Ã'));
+ $this::assertFalse($this->qrcode->isKanji('ABC'));
+ $this::assertFalse($this->qrcode->isKanji('123'));
+ }
+
+ /**
+ * isByte() passses any binary string and only fails on empty strings
+ */
+ public function testIsByte():void{
+ $this::assertTrue($this->qrcode->isByte("\x01\x02\x03"));
+ $this::assertTrue($this->qrcode->isByte(' ')); // not empty!
+
+ $this::assertFalse($this->qrcode->isByte(''));
+ }
+
+ /**
+ * tests if an exception is thrown when an invalid (built-in) output type is specified
+ */
+ public function testInitDataInterfaceException():void{
+ $this->expectException(QRCodeOutputException::class);
+ $this->expectExceptionMessage('invalid output type');
+
+ $this->options->outputType = 'foo';
+
+ (new QRCode($this->options))->render('test');
+ }
+
+ /**
+ * tests if an exception is thrown when trying to call getMatrix() without data (empty string, no data set)
+ */
+ public function testGetMatrixException():void{
+ $this->expectException(QRCodeDataException::class);
+ $this->expectExceptionMessage('QRCode::getMatrix() No data given.');
+
+ $this->qrcode->getMatrix();
+ }
+
+}
diff --git a/tests/QROptionsTest.php b/tests/QROptionsTest.php
new file mode 100644
index 000000000..dcc19e3e6
--- /dev/null
+++ b/tests/QROptionsTest.php
@@ -0,0 +1,142 @@
+
+ * @copyright 2018 smiley
+ * @license MIT
+ *
+ * @noinspection PhpUnusedLocalVariableInspection
+ */
+
+namespace chillerlan\QRCodeTest;
+
+use chillerlan\QRCode\{QRCode, QRCodeException, QROptions};
+use PHPUnit\Framework\TestCase;
+
+/**
+ * QROptions test
+ */
+class QROptionsTest extends TestCase{
+
+ /**
+ * @see testVersionClamp()
+ * @return int[][]
+ * @internal
+ */
+ public function VersionProvider():array{
+ return [
+ 'values > 40 should be clamped to 40' => [42, 40],
+ 'values < 1 should be clamped to 1' => [-42, 1],
+ 'values in between shold not be touched' => [21, 21],
+ 'value -1 should be treated as is (default)' => [QRCode::VERSION_AUTO, -1],
+ ];
+ }
+
+ /**
+ * Tests the $version clamping
+ *
+ * @dataProvider VersionProvider
+ */
+ public function testVersionClamp(int $version, int $expected):void{
+ $o = new QROptions(['version' => $version]);
+
+ $this::assertSame($expected, $o->version);
+ }
+
+ /**
+ * @see testVersionMinMaxClamp()
+ * @return int[][]
+ * @internal
+ */
+ public function VersionMinMaxProvider():array{
+ return [
+ 'normal clamp' => [5, 10, 5, 10],
+ 'exceeding values' => [-42, 42, 1, 40],
+ 'min > max' => [10, 5, 5, 10],
+ 'min > max, exceeding' => [42, -42, 1, 40],
+ ];
+ }
+
+ /**
+ * Tests the $versionMin/$versionMax clamping
+ *
+ * @dataProvider VersionMinMaxProvider
+ */
+ public function testVersionMinMaxClamp(int $versionMin, int $versionMax, int $expectedMin, int $expectedMax):void{
+ $o = new QROptions(['versionMin' => $versionMin, 'versionMax' => $versionMax]);
+
+ $this::assertSame($expectedMin, $o->versionMin);
+ $this::assertSame($expectedMax, $o->versionMax);
+ }
+
+ /**
+ * @see testMaskPatternClamp()
+ * @return int[][]
+ * @internal
+ */
+ public function MaskPatternProvider():array{
+ return [
+ 'exceed max' => [42, 7,],
+ 'exceed min' => [-42, 0],
+ 'default (-1)' => [QRCode::MASK_PATTERN_AUTO, -1],
+ ];
+ }
+
+ /**
+ * Tests the $maskPattern clamping
+ *
+ * @dataProvider MaskPatternProvider
+ */
+ public function testMaskPatternClamp(int $maskPattern, int $expected):void{
+ $o = new QROptions(['maskPattern' => $maskPattern]);
+
+ $this::assertSame($expected, $o->maskPattern);
+ }
+
+ /**
+ * Tests if an exception is thrown on an incorrect ECC level
+ */
+ public function testInvalidEccLevelException():void{
+ $this->expectException(QRCodeException::class);
+ $this->expectExceptionMessage('Invalid error correct level: 42');
+
+ $o = new QROptions(['eccLevel' => 42]);
+ }
+
+ /**
+ * @see testClampRGBValues()
+ * @return int[][][]
+ * @internal
+ */
+ public function RGBProvider():array{
+ return [
+ 'exceeding values' => [[-1, 0, 999], [0, 0 ,255]],
+ 'too few values' => [[1, 2], [255, 255, 255]],
+ 'too many values' => [[1, 2, 3, 4, 5], [1, 2, 3]],
+ ];
+ }
+
+ /**
+ * Tests clamping of the RGB values for $imageTransparencyBG
+ *
+ * @dataProvider RGBProvider
+ */
+ public function testClampRGBValues(array $rgb, array $expected):void{
+ $o = new QROptions(['imageTransparencyBG' => $rgb]);
+
+ $this::assertSame($expected, $o->imageTransparencyBG);
+ }
+
+ /**
+ * Tests if an exception is thrown when a non-numeric RGB value was encoutered
+ */
+ public function testInvalidRGBValueException():void{
+ $this->expectException(QRCodeException::class);
+ $this->expectExceptionMessage('Invalid RGB value.');
+
+ $o = new QROptions(['imageTransparencyBG' => ['r', 'g', 'b']]);
+ }
+
+}
diff --git a/tests/qrcodes/alphanum.png b/tests/qrcodes/alphanum.png
new file mode 100644
index 000000000..fdcf4f289
Binary files /dev/null and b/tests/qrcodes/alphanum.png differ
diff --git a/tests/qrcodes/byte.png b/tests/qrcodes/byte.png
new file mode 100644
index 000000000..0e16317ed
Binary files /dev/null and b/tests/qrcodes/byte.png differ
diff --git a/tests/qrcodes/damaged.png b/tests/qrcodes/damaged.png
new file mode 100644
index 000000000..feeb7443e
Binary files /dev/null and b/tests/qrcodes/damaged.png differ
diff --git a/tests/qrcodes/hello_world.png b/tests/qrcodes/hello_world.png
new file mode 100644
index 000000000..3578ea0cc
Binary files /dev/null and b/tests/qrcodes/hello_world.png differ
diff --git a/tests/qrcodes/hello_world_mirrored.png b/tests/qrcodes/hello_world_mirrored.png
new file mode 100644
index 000000000..d871f1dbf
Binary files /dev/null and b/tests/qrcodes/hello_world_mirrored.png differ
diff --git a/tests/qrcodes/kanji.png b/tests/qrcodes/kanji.png
new file mode 100644
index 000000000..1ac7990b2
Binary files /dev/null and b/tests/qrcodes/kanji.png differ
diff --git a/tests/qrcodes/numeric.png b/tests/qrcodes/numeric.png
new file mode 100644
index 000000000..24b2b88ce
Binary files /dev/null and b/tests/qrcodes/numeric.png differ
diff --git a/tests/qrcodes/rotated.png b/tests/qrcodes/rotated.png
new file mode 100644
index 000000000..194a3c22c
Binary files /dev/null and b/tests/qrcodes/rotated.png differ
diff --git a/tests/qrcodes/smol.png b/tests/qrcodes/smol.png
new file mode 100644
index 000000000..540160e80
Binary files /dev/null and b/tests/qrcodes/smol.png differ
diff --git a/tests/qrcodes/tilted.png b/tests/qrcodes/tilted.png
new file mode 100644
index 000000000..a91834437
Binary files /dev/null and b/tests/qrcodes/tilted.png differ