From c6e81f28821e54f7562c0ae8820a7075c9c6868d Mon Sep 17 00:00:00 2001 From: codexp Date: Sat, 24 Mar 2018 20:35:42 +0100 Subject: [PATCH] add support for cyrillic cahracters --- encoding.lua | 265 ++++++++++++++++++++++++++++++++++++++++++++ init.lua | 88 +++++++++++---- textures/hdf_00.png | Bin 0 -> 87 bytes textures/hdf_a8.png | Bin 0 -> 150 bytes textures/hdf_b8.png | Bin 0 -> 175 bytes textures/hdf_b9.png | Bin 0 -> 179 bytes textures/hdf_c0.png | Bin 0 -> 180 bytes textures/hdf_c1.png | Bin 0 -> 173 bytes textures/hdf_c2.png | Bin 0 -> 169 bytes textures/hdf_c3.png | Bin 0 -> 141 bytes textures/hdf_c4.png | Bin 0 -> 167 bytes textures/hdf_c5.png | Bin 0 -> 149 bytes textures/hdf_c6.png | Bin 0 -> 172 bytes textures/hdf_c7.png | Bin 0 -> 172 bytes textures/hdf_c8.png | Bin 0 -> 171 bytes textures/hdf_c9.png | Bin 0 -> 173 bytes textures/hdf_ca.png | Bin 0 -> 183 bytes textures/hdf_cb.png | Bin 0 -> 172 bytes textures/hdf_cc.png | Bin 0 -> 176 bytes textures/hdf_cd.png | Bin 0 -> 160 bytes textures/hdf_ce.png | Bin 0 -> 187 bytes textures/hdf_cf.png | Bin 0 -> 143 bytes textures/hdf_d0.png | Bin 0 -> 174 bytes textures/hdf_d1.png | Bin 0 -> 185 bytes textures/hdf_d2.png | Bin 0 -> 145 bytes textures/hdf_d3.png | Bin 0 -> 183 bytes textures/hdf_d4.png | Bin 0 -> 173 bytes textures/hdf_d5.png | Bin 0 -> 186 bytes textures/hdf_d6.png | Bin 0 -> 157 bytes textures/hdf_d7.png | Bin 0 -> 158 bytes textures/hdf_d8.png | Bin 0 -> 144 bytes textures/hdf_d9.png | Bin 0 -> 150 bytes textures/hdf_da.png | Bin 0 -> 175 bytes textures/hdf_db.png | Bin 0 -> 167 bytes textures/hdf_dc.png | Bin 0 -> 172 bytes textures/hdf_dd.png | Bin 0 -> 186 bytes textures/hdf_de.png | Bin 0 -> 185 bytes textures/hdf_df.png | Bin 0 -> 177 bytes textures/hdf_e0.png | Bin 0 -> 176 bytes textures/hdf_e1.png | Bin 0 -> 178 bytes textures/hdf_e2.png | Bin 0 -> 170 bytes textures/hdf_e3.png | Bin 0 -> 151 bytes textures/hdf_e4.png | Bin 0 -> 162 bytes textures/hdf_e5.png | Bin 0 -> 186 bytes textures/hdf_e6.png | Bin 0 -> 147 bytes textures/hdf_e7.png | Bin 0 -> 176 bytes textures/hdf_e8.png | Bin 0 -> 163 bytes textures/hdf_e9.png | Bin 0 -> 167 bytes textures/hdf_ea.png | Bin 0 -> 169 bytes textures/hdf_eb.png | Bin 0 -> 159 bytes textures/hdf_ec.png | Bin 0 -> 160 bytes textures/hdf_ed.png | Bin 0 -> 155 bytes textures/hdf_ee.png | Bin 0 -> 172 bytes textures/hdf_ef.png | Bin 0 -> 146 bytes textures/hdf_f0.png | Bin 0 -> 168 bytes textures/hdf_f1.png | Bin 0 -> 172 bytes textures/hdf_f2.png | Bin 0 -> 148 bytes textures/hdf_f3.png | Bin 0 -> 176 bytes textures/hdf_f4.png | Bin 0 -> 170 bytes textures/hdf_f5.png | Bin 0 -> 172 bytes textures/hdf_f6.png | Bin 0 -> 155 bytes textures/hdf_f7.png | Bin 0 -> 159 bytes textures/hdf_f8.png | Bin 0 -> 145 bytes textures/hdf_f9.png | Bin 0 -> 151 bytes textures/hdf_fa.png | Bin 0 -> 170 bytes textures/hdf_fb.png | Bin 0 -> 166 bytes textures/hdf_fc.png | Bin 0 -> 156 bytes textures/hdf_fd.png | Bin 0 -> 180 bytes textures/hdf_fe.png | Bin 0 -> 164 bytes textures/hdf_ff.png | Bin 0 -> 174 bytes 70 files changed, 329 insertions(+), 24 deletions(-) create mode 100644 encoding.lua create mode 100644 textures/hdf_00.png create mode 100644 textures/hdf_a8.png create mode 100644 textures/hdf_b8.png create mode 100644 textures/hdf_b9.png create mode 100644 textures/hdf_c0.png create mode 100644 textures/hdf_c1.png create mode 100644 textures/hdf_c2.png create mode 100644 textures/hdf_c3.png create mode 100644 textures/hdf_c4.png create mode 100644 textures/hdf_c5.png create mode 100644 textures/hdf_c6.png create mode 100644 textures/hdf_c7.png create mode 100644 textures/hdf_c8.png create mode 100644 textures/hdf_c9.png create mode 100644 textures/hdf_ca.png create mode 100644 textures/hdf_cb.png create mode 100644 textures/hdf_cc.png create mode 100644 textures/hdf_cd.png create mode 100644 textures/hdf_ce.png create mode 100644 textures/hdf_cf.png create mode 100644 textures/hdf_d0.png create mode 100644 textures/hdf_d1.png create mode 100644 textures/hdf_d2.png create mode 100644 textures/hdf_d3.png create mode 100644 textures/hdf_d4.png create mode 100644 textures/hdf_d5.png create mode 100644 textures/hdf_d6.png create mode 100644 textures/hdf_d7.png create mode 100644 textures/hdf_d8.png create mode 100644 textures/hdf_d9.png create mode 100644 textures/hdf_da.png create mode 100644 textures/hdf_db.png create mode 100644 textures/hdf_dc.png create mode 100644 textures/hdf_dd.png create mode 100644 textures/hdf_de.png create mode 100644 textures/hdf_df.png create mode 100644 textures/hdf_e0.png create mode 100644 textures/hdf_e1.png create mode 100644 textures/hdf_e2.png create mode 100644 textures/hdf_e3.png create mode 100644 textures/hdf_e4.png create mode 100644 textures/hdf_e5.png create mode 100644 textures/hdf_e6.png create mode 100644 textures/hdf_e7.png create mode 100644 textures/hdf_e8.png create mode 100644 textures/hdf_e9.png create mode 100644 textures/hdf_ea.png create mode 100644 textures/hdf_eb.png create mode 100644 textures/hdf_ec.png create mode 100644 textures/hdf_ed.png create mode 100644 textures/hdf_ee.png create mode 100644 textures/hdf_ef.png create mode 100644 textures/hdf_f0.png create mode 100644 textures/hdf_f1.png create mode 100644 textures/hdf_f2.png create mode 100644 textures/hdf_f3.png create mode 100644 textures/hdf_f4.png create mode 100644 textures/hdf_f5.png create mode 100644 textures/hdf_f6.png create mode 100644 textures/hdf_f7.png create mode 100644 textures/hdf_f8.png create mode 100644 textures/hdf_f9.png create mode 100644 textures/hdf_fa.png create mode 100644 textures/hdf_fb.png create mode 100644 textures/hdf_fc.png create mode 100644 textures/hdf_fd.png create mode 100644 textures/hdf_fe.png create mode 100644 textures/hdf_ff.png diff --git a/encoding.lua b/encoding.lua new file mode 100644 index 0000000..16e35fe --- /dev/null +++ b/encoding.lua @@ -0,0 +1,265 @@ +-- encoding borrowed from signs_lib mod of https://github.com/lord-server/lord + +local ansi_decode = { + [128] = "\208\130", + [129] = "\208\131", + [130] = "\226\128\154", + [131] = "\209\147", + [132] = "\226\128\158", + [133] = "\226\128\166", + [134] = "\226\128\160", + [135] = "\226\128\161", + [136] = "\226\130\172", + [137] = "\226\128\176", + [138] = "\208\137", + [139] = "\226\128\185", + [140] = "\208\138", + [141] = "\208\140", + [142] = "\208\139", + [143] = "\208\143", + [144] = "\209\146", + [145] = "\226\128\152", + [146] = "\226\128\153", + [147] = "\226\128\156", + [148] = "\226\128\157", + [149] = "\226\128\162", + [150] = "\226\128\147", + [151] = "\226\128\148", + [152] = "\194\152", + [153] = "\226\132\162", + [154] = "\209\153", + [155] = "\226\128\186", + [156] = "\209\154", + [157] = "\209\156", + [158] = "\209\155", + [159] = "\209\159", + [160] = "\194\160", + [161] = "\209\142", + [162] = "\209\158", + [163] = "\208\136", + [164] = "\194\164", + [165] = "\210\144", + [166] = "\194\166", + [167] = "\194\167", + [168] = "\208\129", + [169] = "\194\169", + [170] = "\208\132", + [171] = "\194\171", + [172] = "\194\172", + [173] = "\194\173", + [174] = "\194\174", + [175] = "\208\135", + [176] = "\194\176", + [177] = "\194\177", + [178] = "\208\134", + [179] = "\209\150", + [180] = "\210\145", + [181] = "\194\181", + [182] = "\194\182", + [183] = "\194\183", + [184] = "\209\145", + [185] = "\226\132\150", + [186] = "\209\148", + [187] = "\194\187", + [188] = "\209\152", + [189] = "\208\133", + [190] = "\209\149", + [191] = "\209\151" +} +local utf8_decode = { + [128] = { + [147] = "\150", + [148] = "\151", + [152] = "\145", + [153] = "\146", + [154] = "\130", + [156] = "\147", + [157] = "\148", + [158] = "\132", + [160] = "\134", + [161] = "\135", + [162] = "\149", + [166] = "\133", + [176] = "\137", + [185] = "\139", + [186] = "\155" + }, + [130] = {[172] = "\136"}, + [132] = {[150] = "\185", [162] = "\153"}, + [194] = { + [152] = "\152", + [160] = "\160", + [164] = "\164", + [166] = "\166", + [167] = "\167", + [169] = "\169", + [171] = "\171", + [172] = "\172", + [173] = "\173", + [174] = "\174", + [176] = "\176", + [177] = "\177", + [181] = "\181", + [182] = "\182", + [183] = "\183", + [187] = "\187" + }, + [208] = { + [129] = "\168", + [130] = "\128", + [131] = "\129", + [132] = "\170", + [133] = "\189", + [134] = "\178", + [135] = "\175", + [136] = "\163", + [137] = "\138", + [138] = "\140", + [139] = "\142", + [140] = "\141", + [143] = "\143", + [144] = "\192", + [145] = "\193", + [146] = "\194", + [147] = "\195", + [148] = "\196", + [149] = "\197", + [150] = "\198", + [151] = "\199", + [152] = "\200", + [153] = "\201", + [154] = "\202", + [155] = "\203", + [156] = "\204", + [157] = "\205", + [158] = "\206", + [159] = "\207", + [160] = "\208", + [161] = "\209", + [162] = "\210", + [163] = "\211", + [164] = "\212", + [165] = "\213", + [166] = "\214", + [167] = "\215", + [168] = "\216", + [169] = "\217", + [170] = "\218", + [171] = "\219", + [172] = "\220", + [173] = "\221", + [174] = "\222", + [175] = "\223", + [176] = "\224", + [177] = "\225", + [178] = "\226", + [179] = "\227", + [180] = "\228", + [181] = "\229", + [182] = "\230", + [183] = "\231", + [184] = "\232", + [185] = "\233", + [186] = "\234", + [187] = "\235", + [188] = "\236", + [189] = "\237", + [190] = "\238", + [191] = "\239" + }, + [209] = { + [128] = "\240", + [129] = "\241", + [130] = "\242", + [131] = "\243", + [132] = "\244", + [133] = "\245", + [134] = "\246", + [135] = "\247", + [136] = "\248", + [137] = "\249", + [138] = "\250", + [139] = "\251", + [140] = "\252", + [141] = "\253", + [142] = "\254", + [143] = "\255", + [144] = "\161", + [145] = "\184", + [146] = "\144", + [147] = "\131", + [148] = "\186", + [149] = "\190", + [150] = "\179", + [151] = "\191", + [152] = "\188", + [153] = "\154", + [154] = "\156", + [155] = "\158", + [156] = "\157", + [158] = "\162", + [159] = "\159" + }, + [210] = {[144] = "\165", [145] = "\180"} +} + +local nmdc = { + [36] = "$", + [124] = "|" +} + +function AnsiToUtf8(s) + local r, b = "" + for i = 1, s and s:len() or 0 do + b = s:byte(i) + if b < 128 then + r = r .. string.char(b) + else + if b > 239 then + r = r .. "\209" .. string.char(b - 112) + elseif b > 191 then + r = r .. "\208" .. string.char(b - 48) + elseif ansi_decode[b] then + r = r .. ansi_decode[b] + else + r = r .. "_" + end + end + end + return r +end + +function Utf8ToAnsi(s) + local a, j, r, b = 0, 0, "" + for i = 1, s and s:len() or 0 do + b = s:byte(i) + if b < 128 then + if nmdc[b] then + r = r .. nmdc[b] + else + r = r .. string.char(b) + end + elseif a == 2 then + a, j = a - 1, b + elseif a == 1 then + --if j == nil or b == nil then return r end + --print(j) + --print(b) + --local ansi = utf8_decode[j] + --if ansi == nil then return r end + --if ansi[b] == nil then return r end + if utf8_decode[j] then + if utf8_decode[j][b] then + a, r = a - 1, r .. utf8_decode[j][b] + end + end + elseif b == 226 then + a = 2 + elseif b == 194 or b == 208 or b == 209 or b == 210 then + j, a = b, 1 + else + r = r .. "_" + end + end + return r +end diff --git a/init.lua b/init.lua index 804a720..9af90c4 100644 --- a/init.lua +++ b/init.lua @@ -16,8 +16,16 @@ local enable_colored_metal_signs = true local current_keyword = minetest.settings:get("interact_keyword") or "iaccept" signs_lib = {} +signs_lib.path = minetest.get_modpath(minetest.get_current_modname()) screwdriver = screwdriver or {} +-- Load support for intllib. +local S, NS = dofile(signs_lib.path .. "/intllib.lua") +signs_lib.gettext = S + +-- text encoding +dofile(signs_lib.path .. "/encoding.lua"); + signs_lib.wallmounted_rotate = function(pos, node, user, mode, new_param2) if mode ~= screwdriver.ROTATE_AXIS then return false end minetest.swap_node(pos, {name = node.name, param2 = (node.param2 + 1) % 6}) @@ -113,11 +121,6 @@ signs_lib.sign_post_model = { } } --- Load support for intllib. -local MP = minetest.get_modpath(minetest.get_current_modname()) -local S, NS = dofile(MP.."/intllib.lua") -signs_lib.gettext = S - -- the list of standard sign nodes signs_lib.sign_node_list = { @@ -174,28 +177,48 @@ end -- CONSTANTS -local MP = minetest.get_modpath("signs_lib") - --- Used by `build_char_db' to locate the file. -local FONT_FMT = "%s/hdf_%02x.png" - --- Simple texture name for building text texture. -local FONT_FMT_SIMPLE = "hdf_%02x.png" - -- Path to the textures. -local TP = MP.."/textures" +local TP = signs_lib.path .. "/textures" +-- Font file formatter +local CHAR_FILE = "%s_%02x.png" +-- Fonts path +local CHAR_PATH = TP .. "/" .. CHAR_FILE + +-- Font name. +local font_name = "hdf" -- Lots of overkill here. KISS advocates, go away, shoo! ;) -- kaeza local PNG_HDR = string.char(0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A) +-- check if a file does exist +-- to avoid reopening file after checking again +-- pass TRUE as second argument +function file_exists(name, return_handle, mode) + mode = mode or "r"; + local f = io.open(name, mode) + if f ~= nil then + if (return_handle) then + return f + end + io.close(f) + return true + else + return false + end +end + -- Read the image size from a PNG file. -- Returns image_w, image_h. -- Only the LSB is read from each field! local function read_image_size(filename) - local f = io.open(filename, "rb") + local f = file_exists(filename, true, "rb") + -- file might not exist (don't crash the game) + if (not f) then + return 0, 0 + end f:seek("set", 0x0) - local hdr = f:read(8) + local hdr = f:read(string.len(PNG_HDR)) if hdr ~= PNG_HDR then f:close() return @@ -243,8 +266,8 @@ local function build_char_db() local total_width = 0 local char_count = 0 - for c = 32, 126 do - local w, h = read_image_size(FONT_FMT:format(TP, c)) + for c = 32, 255 do + local w, h = read_image_size(CHAR_PATH:format(font_name, c)) if w and h then local ch = string.char(c) charwidth[ch] = w @@ -308,6 +331,19 @@ local function fill_line(x, y, w, c) return table.concat(tex) end +-- make char texture file name +-- if texture file does not exist use fallback texture instead +local function char_tex(font_name, ch) + local c = ch:byte() + local exists, tex = file_exists(CHAR_PATH:format(font_name, c)) + if exists and c ~= 14 then + tex = CHAR_FILE:format(font_name, c) + else + tex = CHAR_FILE:format(font_name, 0x0) + end + return tex, exists +end + local function make_line_texture(line, lineno, pos) local width = 0 @@ -344,9 +380,9 @@ local function make_line_texture(line, lineno, pos) end if #chars < MAX_INPUT_CHARS then table.insert(chars, { - off=ch_offs, - tex=FONT_FMT_SIMPLE:format(c:byte()), - col=("%X"):format(cur_color), + off = ch_offs, + tex = char_tex(font_name, c), + col = ("%X"):format(cur_color), }) end ch_offs = ch_offs + w @@ -387,7 +423,10 @@ local function make_line_texture(line, lineno, pos) end table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, ch.tex)) end - table.insert(texture, (":%d,%d=hdf_20.png"):format(xpos + word.w, ypos)) + table.insert( + texture, + (":%d,%d="):format(xpos + word.w, ypos) .. char_tex(font_name, " ") + ) xpos = xpos + word.w + charwidth[" "] if xpos >= (SIGN_WIDTH + charwidth[" "]) then break end end @@ -413,10 +452,11 @@ end local function set_obj_text(obj, text, new, pos) local split = new and split_lines_and_words or split_lines_and_words_old + local text_ansi = Utf8ToAnsi(text) local n = minetest.registered_nodes[minetest.get_node(pos).name] local text_scale = (n and n.text_scale) or DEFAULT_TEXT_SCALE obj:set_properties({ - textures={make_sign_texture(split(text), pos)}, + textures={make_sign_texture(split(text_ansi), pos)}, visual_size = text_scale, }) end @@ -636,7 +676,7 @@ function signs_lib.receive_fields(pos, formname, fields, sender, lock) if fields and fields.text and fields.ok then minetest.log("action", S("@1 wrote \"@2\" to @3sign at @4", (sender:get_player_name() or ""), - fields.text, + fields.text:gsub('\\', '\\\\'):gsub("\n", "\\n"), lockstr, minetest.pos_to_string(pos) )) diff --git a/textures/hdf_00.png b/textures/hdf_00.png new file mode 100644 index 0000000000000000000000000000000000000000..ec762d5558585a63cbaa38c1c88dbc01d5dbc493 GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQgWUyjv*44lM{aQGiK_uFb3$g l{Fm42QEOQzt literal 0 HcmV?d00001 diff --git a/textures/hdf_a8.png b/textures/hdf_a8.png new file mode 100644 index 0000000000000000000000000000000000000000..75d14951557ac3c24e04a3bc42ed7ca5e40dc328 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^!2%?Unca2(DW)WEcNd2L?fqx=19_YU9+AZi z4BWyX%*Zfnjs#GUy~NYkmHj?93y+M{QO5uAKp}Nc7sn8e>&Xc}&VQKS*x1PE=p<2a r;79{o#DXvNbF>Ut*iHnvHEA*YR^<}-_rEF;sD;7P)z4*}Q$iB}y@x1k literal 0 HcmV?d00001 diff --git a/textures/hdf_b8.png b/textures/hdf_b8.png new file mode 100644 index 0000000000000000000000000000000000000000..c8215a18be7e7a631772093ac1e40f3945466256 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{yvC-rd=p}TLJpoTjv*44OZ&Zr7z|jP4}bX=?k9eA zCxnf3B@ceuQTx!S@S R-UH2I@O1TaS?83{1OUR5G|K=0 literal 0 HcmV?d00001 diff --git a/textures/hdf_b9.png b/textures/hdf_b9.png new file mode 100644 index 0000000000000000000000000000000000000000..765437a3e38dd902433836de91eb14e6b87212c3 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b-3y>`THmwy%F(rAsyDCf^mu z>Lq+_0s=~kIl>1fitrwFarNB$R@^AxG<9h^v(ZiKtaX83tR8LpzO46)Z=HP#6Q_`n V;-qJXF9XeE@O1TaS?83{1OPs%G)e#f literal 0 HcmV?d00001 diff --git a/textures/hdf_c0.png b/textures/hdf_c0.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3e3803e893e5fd3fb66ebc95fde834348d38ae GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CP!2%?!UOYPlq?nSt-CY>|xA&jf59DzcctjR6 zFmMZlFeAgPITAoY_7YEDSN8kd%%Un5o%a^80fk&WT^vIsF1JoF`THmwy%F(rAsyDUh+XOEH PO=9qL^>bP0l+XkKH)b+X literal 0 HcmV?d00001 diff --git a/textures/hdf_c2.png b/textures/hdf_c2.png new file mode 100644 index 0000000000000000000000000000000000000000..ea6043ad365c64079093c10c2cf6c72324212c34 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b-3y>`THmwy%F(rAsyD;(z>qe^2wQ zh{9=teHTJz1h9w5ICJ|m literal 0 HcmV?d00001 diff --git a/textures/hdf_c3.png b/textures/hdf_c3.png new file mode 100644 index 0000000000000000000000000000000000000000..1cc88a868fff9e6a07548bf836dedcbc7a457283 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^!2%?Unca2(DW)WEcNd2L?fqx=19_YU9+AZi z4BWyX%*Zfnjs#GUy~NYkmHj?9v#6%_j&pOT0)^x}T^vI=t|zDbIN!i_fn~;pr;!(~ iCa#dsVd`P|%fxW=Hj8AG<$ZCWN(N6?KbLh*2~7Zeb0tmy literal 0 HcmV?d00001 diff --git a/textures/hdf_c4.png b/textures/hdf_c4.png new file mode 100644 index 0000000000000000000000000000000000000000..1006dff76f6716f7effe7547282daaf7a036b7ba GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b-3y>`THmwy%F(rAsyD4nJ za0`PlBg3pY5H=O_WRt-qT0$W%H^s+AvI4I#}J9j$tge1H!vEs%rLmRAz{_g pMO@ti%Rc_k%(gKL?QvPj#9%&?L)dP+(k!4322WQ%mvv4FO#rbxCx-w4 literal 0 HcmV?d00001 diff --git a/textures/hdf_c6.png b/textures/hdf_c6.png new file mode 100644 index 0000000000000000000000000000000000000000..7e5b16c12466e440aadda0c4d83de866c1b09097 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CP!2%?!UOYPlq?nSt-CY>|xA&jf59DzcctjR6 zFmMZlFeAgPITAoY_7YEDSN8kd%%b|1vbx^UKp|UC7sn8Z%gHG}&NndsX`l4};h+CJ zK;X0E%4Ge69V*98G^FWvP4?K{-1yL**?3ZYLQR@h)dazCg-2Hy8CFFK@tI0|jRP9Q N;OXk;vd$@?2>|ABGt2-0 literal 0 HcmV?d00001 diff --git a/textures/hdf_c7.png b/textures/hdf_c7.png new file mode 100644 index 0000000000000000000000000000000000000000..6303b0e84c7fae2c11c6887f999830e6f2880cf4 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^!2%?Unca2(DW)WEcNd2L?fqx=19_YU9+AZi z4BWyX%*Zfnjs#GUy~NYkmHj?9v#5dT&4ZlpfI_yOE{-7_*K_+E`4|*94qH9?zu$(R zP5Drs&eE9%s@x2BZ=Z3wX62g5^lZAwZb24nJ za0`PlBg3pY5H=O_WRt-qDDrglmDFu3fXwNIEF}E?(KKvV^H8YZ1w2>e4TkB zOlrFxM@>?kGl`LdPe4NVyw}#Cts*-8A95lO#Gc)-cK(0g(E8s=x}r6lQbk^-M}X!q Nc)I$ztaD0e0szo>F@pdA literal 0 HcmV?d00001 diff --git a/textures/hdf_c9.png b/textures/hdf_c9.png new file mode 100644 index 0000000000000000000000000000000000000000..d3dc073dec5503ec09edafc426ec6a2673fef945 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRt-qQ>fsq1vfHAv;eO#}J9jrF{pv7z{X^<|qIEf3mn; zaE%hbV$v!D{-y`(%7r=1yW4bDdacsCnB2Tx|MJg|Uj*m5`AiCW{A3s3L|$PRMt?V; ONerH@elF{r5}E+qfHA88 literal 0 HcmV?d00001 diff --git a/textures/hdf_ca.png b/textures/hdf_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..a9400654edae7b558cbbacfa2787816b5144f2f2 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CP!2%?!UOYPlq?nSt-CY>|xA&jf59DzcctjR6 zFmMZlFeAgPITAoY_7YEDSN8kd%%Uc$3#9J!0fjs~T^vIsE|*Sl6guF*!crab?|A0TMyF(w;+3uCkIN_E3+TiKpS+m&XME9#tz4W&8 b;L4nJ za0`PlBg3pY5H=O_WRt-q8f^h46dhuLbjeRjv*44d;1N!7z{X=gK93dt*ZdC=ND=n`%v|ZeHW+{HTc&&fwmz(m}nNv@*D;dtHxd$|e N!PC{xWt~$(69DgjE}sAZ literal 0 HcmV?d00001 diff --git a/textures/hdf_cc.png b/textures/hdf_cc.png new file mode 100644 index 0000000000000000000000000000000000000000..0c6614269e88453093cbdb1db532b5d1fad85bca GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CP!2%?!UOYPlq?nSt-CY>|xA&jf59DzcctjR6 zFmMZlFeAgPITAoY_7YEDSN8kd%%bKzCtJl8fkKX+E{-7*m#0p!6k<@|U^egj|G!8_ zhsE99XEKwS%psYpjEpU8j3#!*laEYwsF5?@6fNm%`w@hf`KX SSn4OxFa}RoKbLh*2~7Y#g)i^` literal 0 HcmV?d00001 diff --git a/textures/hdf_cd.png b/textures/hdf_cd.png new file mode 100644 index 0000000000000000000000000000000000000000..5677f033d69a098d1e52f02831cf89298f733ea0 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F!2%>_nEc%hq?nSt-CY>|xA&jf59DzcctjQh zRSAPIBg3pY5H=O_WRt-q87~e7KzmZg$zAi977~7C#U>4-@v-T00@i>7I+vL z85kHQurA>=PS`Hgo+YMJwc@GJr4~ugB6EiHR#w@+jq6%~ni)J@{an^LB{Ts5RxK&? literal 0 HcmV?d00001 diff --git a/textures/hdf_ce.png b/textures/hdf_ce.png new file mode 100644 index 0000000000000000000000000000000000000000..9314974a902e34915d24fca5c6766085cc6b1f5c GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CP!2%?!UOYPlq?nSt-CY>|xA&jf59DzcctjR6 zFmMZlFeAgPITAoY_7YEDSN8kd%%T?Zrxtq|0EK)!T^vIsE|*RSk etCp$v6^i@W3P^@lR$2nhW$<+Mb6Mw<&;$Sok~xL| literal 0 HcmV?d00001 diff --git a/textures/hdf_cf.png b/textures/hdf_cf.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6dee901230f398c3e63bb4e83831808b82c778 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b-3y>`THmwy%F(rAsyDfg%mtp977~7C#U>4-@uw6m~v=YAFH#i jGT&5Z*9j9d_A@hdUSN^hX}G5hsFuOg)z4*}Q$iB}x}YRa literal 0 HcmV?d00001 diff --git a/textures/hdf_d0.png b/textures/hdf_d0.png new file mode 100644 index 0000000000000000000000000000000000000000..74b0c17af7350633d154c182e538d76e910d104f GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b-3y>`THmwy%F(rAsyDTr!(6bWg*nT=&-Fhu43ueZd=QyTpXOosm=at!(oe PpivB-u6{1-oD!M_nEc%hq?nSt-CY>|xA&jf59DzcctjQh zRSAPIBg3pY5H=O_WRt-qGmi7=BXtBg}gjn977~7_x3yTF&J_%v0wgQKT~eo z#bZ?w{9YVF0%k literal 0 HcmV?d00001 diff --git a/textures/hdf_d2.png b/textures/hdf_d2.png new file mode 100644 index 0000000000000000000000000000000000000000..744f4ebff85ecc6336969da30f96774b5b981ee1 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F!2%>_nEc%hq?nSt-CY>|xA&jf59DzcctjQh zRSAPIBg3pY5H=O_WRt-qSm^aksd&K1|?4y#}J9j$tge1H;5*PrX5;0P0-U+ l*-4-8s&nX!iAxL^8J?T6ij{>i*8){Dc)I$ztaD0e0s!puBf_nEc%hq?nSt-CY>|xA&jf59DzcctjQh zRSAPIBg3pY5H=O_WRt-V$9|TA8lR@6!P$NaSV~T+}iKS$DqJ*gzMw~csc&O z6%y43F0|xA&jf59DzcctjR6 zFmMZlFeAgPITAoY_7YEDSN8kd%win8Poy?q0t(rAx;TbNTux5;alS!xgTh8hNeKxF z0j~eaS3l2ZoF3>S@oRyO8XMamtB&ahvMs}&8!2%vu9#4AT9Wgp3^M~mm%jiP_nF{O Pph*m#u6{1-oD!M`THmwy%F(rAsyDaKW!>#n!YvA>46Z%hh@pX>L2}yz6|zfqbiW*Gaqgt=_}u-TQKu doKe^=M)?#zx#rBLc0gkpJYD@<);T3K0RU{VIYs~g literal 0 HcmV?d00001 diff --git a/textures/hdf_d6.png b/textures/hdf_d6.png new file mode 100644 index 0000000000000000000000000000000000000000..8f774839ae32b83d96fb92dd3ad03224a720b066 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b-3y>`THmwy%F(rAsyD4-@rIS0th4}9@e_nEc%hq?nSt-CY>|xA&jf59DzcctjQh zRSAPIBg3pY5H=O_WRt-ViFop@01<^3MqQJIEF}EPEPr8zCrX)`y>q$;j*pH kp)(kFKQCO7rs8SJ@OvJI;8z{BHlSh#Pgg&ebxsLQ0BQCoc>n+a literal 0 HcmV?d00001 diff --git a/textures/hdf_d9.png b/textures/hdf_d9.png new file mode 100644 index 0000000000000000000000000000000000000000..497b45ec3189e0c9a698d95494f9eba90769a2b5 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CP!2%?!UOYPlq?nSt-CY>|xA&jf59DzcctjR6 zFmMZlFeAgPITAoY_7YEDSN8kd%wkepOkH7%fI{k?E{-7*my=U|oNr+M(>^J~L|E_Z rVb>gTe~DWM4f8F(go literal 0 HcmV?d00001 diff --git a/textures/hdf_da.png b/textures/hdf_da.png new file mode 100644 index 0000000000000000000000000000000000000000..1c2454081f7c93211fc34c81ca41cf8b499f9759 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b-3y>`THmwy%F(rAsyDC^OL4oH;(WC$SYxufC zYz@5I*@CprIJ2_^Oz(BDp4%_!EWGw*%BorS_T^pHTq47?U$Oa;^P`W|xA&jf59DzcctjR6 zFmMZlFeAgPITAoY_7YEDSN8kdEZhcskC%pV0);F*T^vIsF0bu#4nJ za0`PlBg3pY5H=O_WRr{+`2j^S5|)n3fX$PIEF}Ep4;!q$DqK&#QymI{vPq^ zx2h&_bIx?q@(E&YDf+Tt-y*wO-W@?!Q_NS-E?OII!|xA&jf59DzcctjR6 zFmMZlFeAgPITAoY_7YEDSN8kd%wp0i$KA7ZfI{A$E{-7*mrExckalW1Q|NrT` zsfIZ*dlaHL9!qO?II=O=K0VyB_>D=@RaW!Q%ICE1O=(d)7HW0kn$Nlj literal 0 HcmV?d00001 diff --git a/textures/hdf_de.png b/textures/hdf_de.png new file mode 100644 index 0000000000000000000000000000000000000000..4c590476f47550001781cddd17934e9739670808 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CP!2%?!UOYPlq?nSt-CY>|xA&jf59DzcctjR6 zFmMZlFeAgPITAoY_7YEDSN8kd%wh`ck(0ip0foFgT^vIsF1H3a@-ZlIFkSnyT`BL!bDPTYRtdN}abDP>IlI1V`j1_oj28!ed~`THmwy%F(rAsyDbP0l+XkKz>YSR literal 0 HcmV?d00001 diff --git a/textures/hdf_e0.png b/textures/hdf_e0.png new file mode 100644 index 0000000000000000000000000000000000000000..93d4b14ad37fb2366753d811b98a3de24be926bb GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{Ji1cMF+bh{g&aLy977~7&+T{QV^HK^UM~Ib|I?}n zRSz49>IMc~kwhuGifmSfQ@13!WJ-T+Ui_ito~eG8*WTF$<`4nJ za0`PlBg3pY5H=O_WRr{yxN=>s!E!GLe8Epjv*44r}jGv9Z=w4E|>lH|LK4nJ za0`PlBg3pY5H=O_WRr{yed+cV>BlNg{(bY977~7&+T{QVo=~)D0Tkz3w{*)ECPH1FQL`Z7M%IEE5spfL=d Lu6{1-oD!M_E)V!2%?kIAl$M6jPG7y9>kr_Wm>bfjrIvkH}&M z25w;xW@MN(M*=9wUgGKN%6^}lg_lv>Rj&0UP)Nhm#W95AdUDE-^9?LBBqTbXZ!$3W rlYT_~^Z_9FF`s9$=Od#>Uzr%Rb6Mn7kIZ!d>S6G7^>bP0l+XkKxD6?5 literal 0 HcmV?d00001 diff --git a/textures/hdf_e4.png b/textures/hdf_e4.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ec02dc80e11800407de0a5839dc7b8c042eef9 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{yaxOe^rduxLdKphjv*44lT&`2Z(y4tA#p-Dsqs=z z!NmVQ8B7{d{|~=WyX~gq#N$%g!Ro84%*?F3%#C4*3%j)Fw3!M(?F^o-elF{r5}E*q CW+|Ki literal 0 HcmV?d00001 diff --git a/textures/hdf_e5.png b/textures/hdf_e5.png new file mode 100644 index 0000000000000000000000000000000000000000..09b431a6b15be452aafe2afc722224004a96d5c2 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{yn5Odxd)YjLf)P(jv*44lT&`2Z(y4tA#p-Dsqs=z zz%P3rQRNs;kVgy{s+Q>+0XrfrZO;iy85}Sb4q9e0I;$)+W-In literal 0 HcmV?d00001 diff --git a/textures/hdf_e6.png b/textures/hdf_e6.png new file mode 100644 index 0000000000000000000000000000000000000000..777b8cd27b5b5b6bb5c558b93c47a284e9770a3b GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{ycYZs-zKO6g;YFU977~7C#U>4-@rCQLgIvQQp2oP nm!K4}Rj2<2Uv_g_w1<~Lu7#Ut%539Ipn3*RS3j3^P6_E)V!2%?kIAl$M6jPG7y9>kr_Wm>bfjrIvkH}&M z25w;xW@MN(M*=9wUgGKN%6^}lg-=MSfMuT|P{`5K#W95AdT+lWUxNY9k(?|4>u>S| zL>Ve4nJ za0`PlBg3pY5H=O_WRr{e4;#$C#z}#g-kqM977~7&+RwlVsPL&l=Sld{x`Wx zEo4i1gaT)H9ON}skXW3jry8^^ZHdsEX~FN;{@MAL!F4*joal?Wxzopr E00kK>xBvhE literal 0 HcmV?d00001 diff --git a/textures/hdf_e9.png b/textures/hdf_e9.png new file mode 100644 index 0000000000000000000000000000000000000000..4d40313c92b4dcf9e3b24d1474cdf874f6e2055d GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{e4^$-GtTe=g)BT>977~7xAr-5F(~jHzV!G1`L9Zg zrf!sVKB?prwWV|iwe1T>#c)I$z JtaD0e0swIGGF1Qo literal 0 HcmV?d00001 diff --git a/textures/hdf_ea.png b/textures/hdf_ea.png new file mode 100644 index 0000000000000000000000000000000000000000..2533ec11787ae6606ceee57040683f73bd3942b0 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^!2%?Unca2(DW)WEcNd2L?fqx=19_YU9+AZi z4BWyX%*Zfnjs#GUy~NYkmHj?93!kiN<_~jUppccPi(?4K^{M?Axfl#Mn9gtf|3CG+ zfTLsbnduJvhKaMp{zysdOn7|GMPp}l=Cj_6r4yrCCmc_lHt)P_??yg(PP4nJ za0`PlBg3pY5H=O_WRr{f^6K}Nur@ZAp=hr#}J9j$tge1H?Yl+kT@Zn)EMwz z@?wZ0_kmDD1A~94nJ za0`PlBg3pY5H=O_WRr{f}Aq^nmw^VAwy3W#}J9j$tge1H?Yl+kT@Znl$el^ zkdn|a`$R{$va*opB;|j~9%4J5)L)u&%413|!(|b6nFf)^azM=tp00i_>zopr07yG4 ACIA2c literal 0 HcmV?d00001 diff --git a/textures/hdf_ed.png b/textures/hdf_ed.png new file mode 100644 index 0000000000000000000000000000000000000000..edd951dbffffd0de188f18121cade78f57b59c76 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{f?RT^xb|%V3h8*dIEF}EPEPr8zJYCqgv1Hqq{M`T vgp`Da*(W?2BY9kQcC-5GUNkcjO0{A5BFQTIOF_B;sE@(Z)z4*}Q$iB}i^?cH literal 0 HcmV?d00001 diff --git a/textures/hdf_ee.png b/textures/hdf_ee.png new file mode 100644 index 0000000000000000000000000000000000000000..813e1f7a1dcdc5d1ef1699b0b9b63d9a5b7b3fc0 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{yt?8w`tQ<#LbjeRjv*44=k_1uV^H95l3)A(f9kG? znafW#=bT_^(Y*Yi|5YQ`myk?Pk(xWT|32NzSDca?qqTEl?7;=AZ!ue@@CqM!`2%DS NgQu&X%Q~loCIGj6Hp~D3 literal 0 HcmV?d00001 diff --git a/textures/hdf_ef.png b/textures/hdf_ef.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f24d20bb62d827aae8722e547026ab9136b9ad GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{g52V(&YFh4-@rCQLgIvQlENt+ mF_W!5A~!s?2`C5pu`(P;W08s|-OdA4&fw|l=d#Wzp$P!4nJ za0`PlBg3pY5H=O_WRr{eDb_`)qhQaLYAH`jv*44lT&`2Z(y4tA#p-DsbSVv z`E$R|HzfY4H>ph7JYmb^XB=)SLYLh_9!pC6Gd9?;z*2JeM}|4e1v&e4pPU66!r4nJ za0`PlBg3pY5H=O_WRr{eDXRsdVK^hTU4nJ za0`PlBg3pY5H=O_WRr{f;FVdQ&MBb@04260c>n+a literal 0 HcmV?d00001 diff --git a/textures/hdf_f3.png b/textures/hdf_f3.png new file mode 100644 index 0000000000000000000000000000000000000000..e09cf75b5f67cc83632f1c9e4033ffb3fccb69ec GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b-3y>`THmwy%F(rAsyD_nEc%hq?nSt-CY>|xA&jf59DzcctjQh zRSAPIBg3pY5H=O_WRr{fMckZVKelXrF-6u*#812VegZ?2!Aqxx<7QPttAg&Auy~#7TFtxf$?-_r`Lj(!`Gh`C`?D5k O5QC?ypUXO@geCw=Vlg}b literal 0 HcmV?d00001 diff --git a/textures/hdf_f6.png b/textures/hdf_f6.png new file mode 100644 index 0000000000000000000000000000000000000000..189a96f327769bbc2bd0c044803c0b01c2841fc6 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{g5n}qH(PH23h8*dIEF}EPEPr8zJYCqgv1H)q?Ck~ vPZE+6nkL;kifoH)j&v;R5)AHWY-D6uvy4Uh`+?2nKz$6Ju6{1-oD!M&YoU&Nnd4kdW{YO-M{g zNJvR&n03Tsnxq61&kdP2r6V1Oj;84mdKI;Vst0LQs0 Aa{vGU literal 0 HcmV?d00001 diff --git a/textures/hdf_f8.png b/textures/hdf_f8.png new file mode 100644 index 0000000000000000000000000000000000000000..3c195aa493deef02c2d1d982dd398f0cc9888e34 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa!2%@b9Mo+CQcOwS?k)`f+xyS#2T2!rL>4nJ za0`PlBg3pY5H=O_WRr{f>OLJWp8bPLQ0-4jv*44lT&`2Z(y4tA#p-DsbN;D l%cNYfqkRX~cTLm?Wq7}nO<2`THmwy%F(rAsyD4-@rISLPA3@rD0a5 qQ&5K5)HyB@s>*F%ZaGanJUk3e8XSTj<#&SgFnGH9xvX4nJ za0`PlBg3pY5H=O_WRr{f^wFQ>+bXbg{(bY977~7&+T{QVo=~Y9Q5&j{5tlj z3xfr!C3}|S9LmxBuzghn!=lehR^7Hzmm@<0=Dm5^vGuh>q<_BowX5vPN0gXAu3_+W L^>bP0l+XkK`THmwy%F(rAsyD4-@rISLPA3@B{3l( zAtk}VXy(L_w*kH!&HbP0 Hl+XkKpDit1 literal 0 HcmV?d00001 diff --git a/textures/hdf_fc.png b/textures/hdf_fc.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c6918001fa0ccf37cd8f00d0eb2db63ff44429 GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^!2%?Unca2(DW)WEcNd2L?fqx=19_YU9+AZi z4BWyX%*Zfnjs#GUy~NYkmHj?9i=eF9^X{fyKp|aE7sn8e>&YoU&Nnd4kdQbbn2?g7 x;>yiDYwQ1utP&9cR}6&`+1k4P_psQqGsJJ=5RnpF{u`)~!PC{xWt~$(699T%C}aQt literal 0 HcmV?d00001 diff --git a/textures/hdf_fd.png b/textures/hdf_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..9130ccde9b96980862367b53b80ba04876b3e87c GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^!2%?Unca2(DW)WEcNd2L?fqx=19_YU9+AZi z4BWyX%*Zfnjs#GUy~NYkmHj?9i=dj=-v_aJKp|I87sn8e>r?x^xef$yFsCp1zQ1VK zhre8{LFNZ%NKE~(qG|t;s{)K?0!nUcblOHA$*hWeRTPsXa988*_AV& XkrER%zRI%&Xdr{9tDnm{r-UW|R?Rs? literal 0 HcmV?d00001 diff --git a/textures/hdf_fe.png b/textures/hdf_fe.png new file mode 100644 index 0000000000000000000000000000000000000000..516529665ac33921cc17b70d75c90a9e3fc533bf GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b-3y>`THmwy%F(rAsyD4nJ za0`PlBg3pY5H=O_WRr{f~w}TmdI@e3fX(QIEF}EPEPr8zJYCqgv1Hqq{e{% zk{3f1xetUI8W{X*_k3i=9ce7=BrNt=^1t(v83DcRTnnul8yhETXB~)z4*}Q$iB}9XT)_ literal 0 HcmV?d00001