From 65e3a21fa463ccf7607c6bf81a15e095edb7dc3e Mon Sep 17 00:00:00 2001 From: treywisp Date: Wed, 1 Oct 2025 05:38:25 +0200 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20=C2=AB?= =?UTF-8?q?/=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- killsay.lua | 713 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 713 insertions(+) create mode 100644 killsay.lua diff --git a/killsay.lua b/killsay.lua new file mode 100644 index 0000000..0f14212 --- /dev/null +++ b/killsay.lua @@ -0,0 +1,713 @@ +--[[ + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +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 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. + +For more information, please refer to + +]] + +script_name("killsay") +script_author("treywisp") +script_description("Sends a message when an opponent is killed and places a mark on his corpse") + +local inicfg = require("inicfg") +local imgui = require("mimgui") +local encoding = require("encoding") +local sampev = require("samp.events") +local ffi = require("ffi") +local addons = require("ADDONS") + +-- encoding +encoding.default = 'CP1251' +local u8 = encoding.UTF8 + +-- Переменные для функций таблицы +local data_file_path = getWorkingDirectory() .. "\\killsay_table.json" +local player_data = {} + +local mark_data = {} +local script_image + +local script_states = { + antiflood = false +} + +local imgui_states = { + window_state = imgui.new.bool(), + menu_state = imgui.new.int(1), +} + +-- Конфиг +local settings_source = "killsay.ini" +local settings = inicfg.load({ + variables = { + -- Главное меню + script_state = false, + startup_notif = true, + + -- Настройка отыгровок + killsay_variation = 0, + killsay_variation_custom = u8[[Это окно создано для собственной отыгровки]], + killsay_distance = false, + + -- Настройка меток + send_mark = false, + use_mark = false, + ignore_text_mark = false, + ignore_self_mark = false, + sound_mark = false, + variation_sound_mark = 21001, + sound_mark_alt = false, + time_mark = false, + variation_time_mark = 1500, + custom_icon_mark = false, + variation_icon_mark = 6, + + -- Прочие настройки + radio_report = false, + squad_report = false, + table_insert = true; + } +}, settings_source) + +local imgui_buffers = { + -- Главное меню + script_image = nil, + script_state = imgui.new.bool(settings.variables.script_state), + startup_notif = imgui.new.bool(settings.variables.startup_notif), + + -- Настойка отыгровок + killsay_variation = imgui.new.int(settings.variables.killsay_variation), + killsay_variation_custom = imgui.new.char[256](u8(tostring(settings.variables.killsay_variation_custom):gsub("&nl", "\n"):sub(1, 255))), + killsay_distance = imgui.new.bool(settings.variables.killsay_distance), + + -- Настройка меток + send_mark = imgui.new.bool(settings.variables.send_mark), + use_mark = imgui.new.bool(settings.variables.use_mark), + ignore_text_mark = imgui.new.bool(settings.variables.ignore_text_mark), + ignore_self_mark = imgui.new.bool(settings.variables.ignore_self_mark), + sound_mark = imgui.new.bool(settings.variables.sound_mark), + variation_sound_mark = imgui.new.int(settings.variables.variation_sound_mark), + sound_mark_alt = imgui.new.bool(settings.variables.sound_mark_alt), + time_mark = imgui.new.bool(settings.variables.time_mark), + variation_time_mark = imgui.new.int(settings.variables.variation_time_mark), + custom_icon_mark = imgui.new.bool(settings.variables.custom_icon_mark), + variation_icon_mark = imgui.new.int(settings.variables.variation_icon_mark), + + -- Прочие настройки + radio_report = imgui.new.bool(settings.variables.radio_report), + squad_report = imgui.new.bool(settings.variables.squad_report), + table_search = imgui.new.char[256](), + table_insert = imgui.new.bool(settings.variables.table_insert); +} + +-- Стандартные вариации отыгровок, $nickname == nickname, $id == id +local killsay_text = { + [1] = { -- Классическая + "/me расстегнул ширинку, приспустил джинсы, сделал тяжелый вдох, достал инструмент", + "/do Ароматная золотая жидкость струйкой стекает по трупу $nickname", + "/me подтянул джинсы, вздохнул c облегчением, застегнул ширинку"; + }, + + [2] = { -- За мат извени + "Слышь $nickname хуле ты мне сделаешь??", + "вовторых пошел нахуй", + "втетьих что ты мне сделаешь, я в другом городе, за мат извени"; + }, + + [3] = { -- Hasta la vista + "Hasta la vista, $nickname"; + }, + + [4] = { -- Новогодняя + "/me кинул открытку от Деда Мороза на труп $nickname", + "/do В открытке написано: С новым годом, $nickname"; + } +} + +local function userNotification(text) + sampAddChatMessage("[killsay] {FFFFFF}"..text, 0xDC143C) +end + +-- Оптимизированная сортировка для таблицы +local function tableOptimizedSort() + table.sort(player_data, function(a, b) + return (tonumber(a.killed) or 0) > (tonumber(b.killed) or 0) + end) +end + +-- Сохранение настроек таблицы +local function tableSaveData() + local file = io.open(data_file_path, 'w') + if not file then return false end + + local content = encodeJson(player_data) + file:write(content) + file:close() + return true +end + +-- Внесение в таблицу ника при убийстве противника +local function tableUpdateKillCount(nickname) + if not nickname or nickname == "" then return false end + + nickname = nickname:match("^%s*(.-)%s*$"):sub(1, 30) + + for i = 1, #player_data do + if player_data[i].nickname == nickname then + player_data[i].killed = (player_data[i].killed or 0) + 1 + tableOptimizedSort() + return true + end + end + + player_data[#player_data+1] = {nickname = nickname, killed = 1} + tableOptimizedSort() + tableSaveData() + return true +end + +local function tableLoadData() + local file = io.open(data_file_path, 'r') + if not file then + file = io.open(data_file_path, 'w') + if not file then return false end + file:write('[]') + file:close() + userNotification("Файл данных не был обнаружен, создан новый под названием \"killsay_table.json\"") + return true + end + + local content = file:read('*a') + file:close() + + local ok, data = pcall(decodeJson, content) + if not ok then return false end + + player_data = data or {} + tableOptimizedSort() + return true +end + +local function saveSettings() + userNotification("Попытка сохранения настроек...") + + local text_fields = { + killsay_variation_custom = true, + } + + -- Автоматизированная проверка на нахождение в таблице + for key, _ in pairs(settings.variables) do + if imgui_buffers[key] then + if text_fields[key] then + settings.variables[key] = (u8:decode(ffi.string(imgui_buffers[key]))):gsub("\n", "&nl") + else + settings.variables[key] = imgui_buffers[key][0] + end + end + end + + if inicfg.save(settings, settings_source) then userNotification("Настройки были успешно сохранены") end +end + +-- Добавляет звуковое уведомление при установке метки +local function setSoundBlip() + if imgui_buffers.sound_mark_alt[0] then + -- Альтернативная вариация + addOneOffSound(0.0, 0.0, 0.0, imgui_buffers.variation_sound_mark[0]) + + else + -- Стандартная вариация (raknet) + local bs = raknetNewBitStream() + raknetBitStreamWriteInt32(bs, imgui_buffers.variation_sound_mark[0]) + raknetBitStreamWriteFloat(bs, 0) + raknetBitStreamWriteFloat(bs, 0) + raknetBitStreamWriteFloat(bs, 0) + raknetEmulRpcReceiveBitStream(16, bs) + raknetDeleteBitStream(bs) + end +end + +local function setDeathBlip(x, y, z) + lua_thread.create(function() + setSoundBlip() + + local mark = { + checkpoint = createCheckpoint(2, x, y, z, 0, 0, 0, 1), + blip = addSpriteBlipForContactPoint(x, y, z, imgui_buffers.custom_icon_mark[0] and imgui_buffers.variation_icon_mark[0] or 19) + } + + mark_data[#mark_data + 1] = mark + + wait(imgui_buffers.time_mark[0] and imgui_buffers.variation_time_mark[0] or 1000) + + if mark.checkpoint then deleteCheckpoint(mark.checkpoint) end + if mark.blip then removeBlip(mark.blip) end + + for i = #mark_data, 1, -1 do + if mark_data[i] == mark then + table.remove(mark_data, i) + break + end + end + end) +end + +local function sendMark(x, y, z) + sampSendChat("/u DCHECKSEALKPOSX".. math.floor(x) .."Y".. math.floor(y) .."Z".. math.floor(z)) +end + +local function sendRolePlay(nickname, id) + -- Отправка собственной отыгровки + if imgui_buffers.killsay_variation[0] == 5 then + for text in u8:decode(ffi.string(imgui_buffers.killsay_variation_custom)):gmatch("[^\r\n]+") do + sampSendChat(text:gsub("$nickname", nickname):gsub("$id", id)) + wait(1400) + end + return true + end + + -- Отправка стандартной отыгровки + for _, text in ipairs(killsay_text[imgui_buffers.killsay_variation[0]]) do + text = (text:gsub("$nickname", ''.. nickname)):gsub("$id", ''.. id) + sampSendChat(text) + wait(1400) + end +end + +-- Главная функция скрипта +local function killsay(id) + local x, y, z, nickname + local _, handle = sampGetCharHandleBySampPlayerId(id) + + if _ then x, y, z = getCharCoordinates(handle) end + if sampIsPlayerConnected(id) then nickname = (sampGetPlayerNickname(id)):gsub("^%b[]", "") end + + local px, py, pz = getCharCoordinates(PLAYER_PED) + + if not (x and y and z and nickname) or x == "" or y == "" or z == "" or nickname == "" then + print("[" .. os.date("%H:%M:%S") .. "]: Произошла ошибка инициализации переменных") + print("[" .. os.date("%H:%M:%S") .. "]: Возможная проблема: выход противника / быстрый респавн") + return false + else + tableUpdateKillCount(nickname) + + if imgui_buffers.send_mark[0] then + sendMark(x, y, z) + wait((imgui_buffers.killsay_variation[0] or imgui_buffers.radio_report[0] or imgui_buffers.squad_report[0]) and 1400 or 0) + end + + if imgui_buffers.killsay_variation[0] ~= 0 and (imgui_buffers.killsay_distance[0] or (not imgui_buffers.killsay_distance[0] and getDistanceBetweenCoords3d(x, y, z, px, py, pz) < 15)) then + sendRolePlay(nickname, id) + end + + if imgui_buffers.radio_report[0] then + sampSendChat("/rb " .. nickname .. "[" .. id .. "] нейтрализован") + wait(imgui_buffers.squad_report[0] and 1400 or 0) + end + + if imgui_buffers.squad_report[0] then + sampSendChat("/fs ".. nickname .. "[" .. id .. "] нейтрализован") + end + end +end + +local function centerColumnText(text) + imgui.SetCursorPosX((imgui.GetColumnOffset() + (imgui.GetColumnWidth() / 2)) - imgui.CalcTextSize(text).x / 2) + imgui.Text(text) +end + +local function customizedHint(text, variation) + imgui.SameLine() + + if variation then + local pos = imgui.GetCursorPosY() + imgui.SetCursorPosY(pos + 3) + end + imgui.TextDisabled(u8"(?)") + + if imgui.IsItemHovered() then + imgui.BeginTooltip() + imgui.PushTextWrapPos(450) + imgui.TextUnformatted(u8(text)) + imgui.PopTextWrapPos() + imgui.EndTooltip() + end +end + +imgui.OnInitialize(function() + imgui.DarkTheme() + imgui_buffers.script_image = imgui.CreateTextureFromFileInMemory(imgui.new("const char*", script_image), #script_image) +end) + +imgui.OnFrame(function() return imgui_states.window_state[0] end, function(player) + imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5)) + imgui.SetNextWindowSize(imgui.ImVec2(523, 550), imgui.Cond.Always) + imgui.Begin(u8"killsay", imgui_states.window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar + imgui.WindowFlags.NoScrollWithMouse) + + -- Селектор меню + if addons.HeaderButton(imgui_states.menu_state[0] == 1, u8"Главное меню") then + imgui_states.menu_state[0] = 1 + end + imgui.SameLine(nil, 30) + + if addons.HeaderButton(imgui_states.menu_state[0] == 2, u8"Настройка отыгровок") then + imgui_states.menu_state[0] = 2 + end + imgui.SameLine(nil, 30) + + if addons.HeaderButton(imgui_states.menu_state[0] == 3, u8"Настройка меток") then + imgui_states.menu_state[0] = 3 + end + imgui.SameLine(nil, 30) + + if addons.HeaderButton(imgui_states.menu_state[0] == 4, u8"Прочие настройки") then + imgui_states.menu_state[0] = 4 + end + + -- Главное меню + if imgui_states.menu_state[0] == 1 then + imgui.SetCursorPos(imgui.ImVec2(188, 170)) + imgui.Image(imgui_buffers.script_image, imgui.ImVec2(150, 150)) + + imgui.SetCursorPosX(183) + addons.ToggleButton(u8"Активация скрипта", imgui_buffers.script_state) + + imgui.SetCursorPos(imgui.ImVec2(165, 482)) + addons.ToggleButton(u8"Уведомление при запуске", imgui_buffers.startup_notif) + + imgui.SetCursorPosY(450) + addons.AlignedText(u8"This software is unlicensed. You can do whatever you want with it", 2) + if imgui.IsItemClicked(0) then os.execute(("start %s"):format("https://unlicense.org")) end + end + + -- Настройка отыгровок + if imgui_states.menu_state[0] == 2 then + -- Выбор вариации отыгровки + imgui.SetCursorPos(imgui.ImVec2(50, 95)) + imgui.RadioButtonIntPtr(u8"Без отыгровок", imgui_buffers.killsay_variation, 0) + customizedHint("Скрипт будет пропускать отыгровки, переходя к другим функциям") + + imgui.SameLine(200) + imgui.RadioButtonIntPtr(u8"Классическая", imgui_buffers.killsay_variation, 1) + customizedHint("[1]: /me расстегнул ширинку, приспустил джинсы, сделал тяжелый вдох, достал инструмент\n[2]: /do Ароматная золотая жидкость струйкой стекает по трупу $nickname\n[3]: /me подтянул джинсы, вздохнул c облегчением, застегнул ширинку") + + imgui.SameLine(348) + imgui.RadioButtonIntPtr(u8"За мат извени", imgui_buffers.killsay_variation, 2) + customizedHint("[1]: Слышь $nickname хуле ты мне сделаешь??\n[2]: вовторых пошел нахуй\n[3]: втетьих что ты мне сделаешь, я в другом городе, за мат извени") + + imgui.SetCursorPos(imgui.ImVec2(50, 130)) + imgui.RadioButtonIntPtr(u8"Hasta la vista", imgui_buffers.killsay_variation, 3) + customizedHint("[1]: Hasta la vista, $nickname") + + imgui.SameLine(200) + imgui.RadioButtonIntPtr(u8"Happy new year", imgui_buffers.killsay_variation, 4) + customizedHint("[1]: /me кинул открытку от Деда Мороза на труп $nickname\n[2]: /do В открытке написано: С новым годом, $nickname") + + imgui.SameLine(348) + imgui.RadioButtonIntPtr(u8"Кастомизация", imgui_buffers.killsay_variation, 5) + customizedHint("Не рекомендуется использовать сочетание \"&nl\", поскольку оно\nкостыльно отвечает за перенос на новую строку. Если не выбрана\nэта фукнция - отыгровки, введенные ниже, не срабатывают") + + -- Собственная вариация отыгровки + imgui.SetCursorPos(imgui.ImVec2(60, 185)) + imgui.InputTextMultiline("##killsay_variation_custom", imgui_buffers.killsay_variation_custom, 256, imgui.ImVec2(400, 150)) + + imgui.SetCursorPosY(360) + addons.AlignedText(u8"Максимально возможная длина твоих отыгровок - 256 символов.\nТакже ты можешь использовать переменные прямо в отыгровках:\nВписывай $nickname для вставки в отыгровки ника противника,\n$id следует использовать, если хочешь подставить ID противника", 2) + + imgui.SetCursorPos(imgui.ImVec2(85, 460)) + addons.ToggleButton(u8"Игнорировать максимальную дистанцию отыгровок", imgui_buffers.killsay_distance) + end + + -- Настройка метки + if imgui_states.menu_state[0] == 3 then + imgui.SetCursorPos(imgui.ImVec2(75, 95)) + addons.ToggleButton(u8"Отправлять метки", imgui_buffers.send_mark) + customizedHint("При ликвидации будет отправлять сообщение в чат сквада в формате DCHECKSEALKPOSX$Y$Z$, где $ - соответствующая координата", true) + + imgui.SameLine(275) + addons.ToggleButton(u8"Устанавливать метки", imgui_buffers.use_mark) + + imgui.SetCursorPos(imgui.ImVec2(75, 130)) + addons.ToggleButton(u8"Игнорировать текст", imgui_buffers.ignore_text_mark) + customizedHint("Текст меток не будет отображаться в чате, однако сами метки будут устанавливаться", true) + + imgui.SameLine(275) + addons.ToggleButton(u8"Игнорировать свои", imgui_buffers.ignore_self_mark) + customizedHint("Свои отправленные метки устанавливаться не будут", true) + + -- Настройка звуковых уведомлений + imgui.SetCursorPos(imgui.ImVec2(75, 185)) + addons.ToggleButton(u8"Проигрывать звуков. оповещение при установке метки", imgui_buffers.sound_mark) + + imgui.SetCursorPos(imgui.ImVec2(75, 220)) + imgui.RadioButtonIntPtr(u8"Пейджер", imgui_buffers.variation_sound_mark, 21001) + imgui.SameLine(220) + imgui.RadioButtonIntPtr(u8"Синтезатор", imgui_buffers.variation_sound_mark, 5205) + imgui.SameLine(382) + imgui.RadioButtonIntPtr(u8"Пинок", imgui_buffers.variation_sound_mark, 1136) + + imgui.SetCursorPos(imgui.ImVec2(75, 260)) + addons.ToggleButton(u8"Использовать альт. применен.", imgui_buffers.sound_mark_alt) + customizedHint("В большинстве случаев не будет работать, однако для кого-то это может стать решением проблемы", true) + + imgui.SetCursorPos(imgui.ImVec2(327, 258)) + if imgui.Button(u8"Проверить звук", imgui.ImVec2(120, 0)) then setSoundBlip() end + + -- Настройка времени метки + imgui.SetCursorPos(imgui.ImVec2(75, 315)) + addons.ToggleButton(u8"Использовать собственное время отображения метки", imgui_buffers.time_mark) + imgui.SetCursorPos(imgui.ImVec2(75, 350)) + imgui.PushItemWidth(372) + imgui.SliderInt(u8"", imgui_buffers.variation_time_mark, 100, 3500) + + -- Настройка кастомизированной иконки метки + imgui.SetCursorPos(imgui.ImVec2(75, 405)) + addons.ToggleButton(u8"Заменить стандартную иконку на кастомизированную", imgui_buffers.custom_icon_mark) + customizedHint("По умолчанию иконкой является красный флажок", true) + + imgui.SetCursorPos(imgui.ImVec2(75, 435)) + imgui.RadioButtonIntPtr(u8"Пистолет", imgui_buffers.variation_icon_mark, 6) + imgui.SameLine(200) + imgui.RadioButtonIntPtr(u8"Сердечко", imgui_buffers.variation_icon_mark, 21) + imgui.SameLine(323) + imgui.RadioButtonIntPtr(u8"Желтый кружок", imgui_buffers.variation_icon_mark, 56) + + end + + -- Прочие настройки + if imgui_states.menu_state[0] == 4 then + -- Настройка отчетов + imgui.SetCursorPos(imgui.ImVec2(85, 95)) + addons.ToggleButton(u8"Отправлять сообщение о ликвидации в рацию (/rb)", imgui_buffers.radio_report) + customizedHint("/rb $nickname[$id] нейтрализован", true) + + imgui.SetCursorPos(imgui.ImVec2(85, 125)) + addons.ToggleButton(u8"Отправлять сообщение о ликвидации в сквад (/fs)", imgui_buffers.squad_report) + customizedHint("/fs $nickname[$id] нейтрализован", true) + + + imgui.SetCursorPosY(165) + addons.AlignedText(u8"Личная статистика ликвидации противников", 2) + + -- Автоматизированная таблица + imgui.SetCursorPos(imgui.ImVec2(85, 190)) + imgui.BeginChild(u8"##Таблица", imgui.ImVec2(355, 200), true) + + imgui.Columns(3) + imgui.SetColumnWidth(-1, 140) + centerColumnText(u8"Nickname") + imgui.NextColumn() + + imgui.SetColumnWidth(-1, 90) + centerColumnText(u8"Убийств") + imgui.NextColumn() + + imgui.SetColumnWidth(-1, 135) + centerColumnText(u8"Действия") + imgui.NextColumn() + + imgui.Columns(1) + imgui.Separator() + + for i, player in ipairs(player_data) do + if (u8:decode(ffi.string(imgui_buffers.table_search))):gsub("%s+", "") == "" or player.nickname:find("^" .. (u8:decode(ffi.string(imgui_buffers.table_search))):gsub("%s+", ""):gsub("[%%%.%[%]%(%)%+%-%?%^%$]", "%%%0")) then + imgui.Columns(3) + imgui.SetColumnWidth(-1, 140) + centerColumnText(u8(player.nickname)) + imgui.NextColumn() + + imgui.SetColumnWidth(-1, 90) + centerColumnText(u8(player.killed)) + imgui.NextColumn() + + imgui.SetColumnWidth(-1, 135) + centerColumnText(u8"Удалить запись") + if imgui.IsItemClicked() then + table.remove(player_data, i) + tableSaveData() + end + + imgui.Columns(1) + imgui.Separator() + end + end + + imgui.EndChild() + + -- Поиск по таблице + imgui.SetCursorPos(imgui.ImVec2(85, 395)) + imgui.PushItemWidth(285) + imgui.InputTextWithHint(u8"##Поиск", u8"Регистрозависимый поиск", imgui_buffers.table_search, 256) + + -- Очистка строки поиска + imgui.SetCursorPos(imgui.ImVec2(375, 395)) + if imgui.Button(u8"Очистить") then + imgui.StrCopy(imgui_buffers.table_search, '') + end + + imgui.SetCursorPos(imgui.ImVec2(85, 435)) + addons.ToggleButton(u8"Заносить ликвидированных противников в таблицу", imgui_buffers.table_insert) + + end + + -- Кнопка сохранения настроек + imgui.SetCursorPos(imgui.ImVec2(-5, 520)) + if imgui.Button(u8"Сохранение настроек", imgui.ImVec2(535, 30)) then + saveSettings() + end + + imgui.End() +end) + +function main() + if not isSampfuncsLoaded() or not isSampLoaded() then return end + while not isSampAvailable() do wait(100) end + + if not tableLoadData() then + userNotification("{FF0000}Файл данных не был успешно загружен, скрипт может работать нестабильно!") + print("Файл данных не был успешно загружен, скрипт может работать нестабильно!") + end + + if imgui_buffers.startup_notif[0] then + userNotification("Скрипт загружен. Открыть меню: /killsay") + end + + sampRegisterChatCommand("killsay", function() imgui_states.window_state[0] = not imgui_states.window_state[0] end) +end + +-- Проверка на убийство противника +function sampev.onSendGiveDamage(id, damage, weaponid, bodypart) + if id ~= 65535 and sampGetPlayerHealth(id) - damage <= 0 and imgui_buffers.script_state[0] then + lua_thread.create(function() + wait(350) + if sampGetPlayerHealth(id) <= 0 and isCharDead(select(2, sampGetCharHandleBySampPlayerId(id))) and not script_states.antiflood then + script_states.antiflood = true + killsay(id) + script_states.antiflood = false + end + end) + end +end + +-- Поиск текста метки +function sampev.onServerMessage(color, text) + if imgui_buffers.script_state[0] and imgui_buffers.use_mark[0] and text:find("^.+%[.*%]% {FFFFFF%}(.*)%[(.*)%]: DCHECKSEALKPOSX.+Y.+Z.+") then + local nickname, id, x, y, z = text:match("^.+%[.*%]% {FFFFFF%}(.*)%[(.*)%]: DCHECKSEALKPOSX(.+)Y(.+)Z(.+)") + local self_nickname = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))) + + if not imgui_buffers.ignore_self_mark[0] or (imgui_buffers.ignore_self_mark[0] and self_nickname ~= nickname) then setDeathBlip(x, y, z) end + + if imgui_buffers.ignore_text_mark[0] then return false end + end +end + +-- модифицированная тема Chapo и функция кнопки Cosmo +function imgui.DarkTheme() + imgui.SwitchContext() + imgui.GetStyle().WindowPadding = imgui.ImVec2(5, 5) + imgui.GetStyle().FramePadding = imgui.ImVec2(5, 5) + imgui.GetStyle().ItemSpacing = imgui.ImVec2(5, 5) + imgui.GetStyle().ItemInnerSpacing = imgui.ImVec2(2, 2) + imgui.GetStyle().TouchExtraPadding = imgui.ImVec2(0, 0) + imgui.GetStyle().IndentSpacing = 0 + imgui.GetStyle().ScrollbarSize = 10 + imgui.GetStyle().GrabMinSize = 10 + imgui.GetStyle().WindowBorderSize = 1 + imgui.GetStyle().ChildBorderSize = 1 + imgui.GetStyle().PopupBorderSize = 1 + imgui.GetStyle().FrameBorderSize = 1 + imgui.GetStyle().TabBorderSize = 1 + imgui.GetStyle().WindowRounding = 0 + imgui.GetStyle().ChildRounding = 5 + imgui.GetStyle().FrameRounding = 5 + imgui.GetStyle().PopupRounding = 5 + imgui.GetStyle().ScrollbarRounding = 5 + imgui.GetStyle().GrabRounding = 5 + imgui.GetStyle().TabRounding = 5 + imgui.GetStyle().WindowTitleAlign = imgui.ImVec2(0.5, 0.5) + imgui.GetStyle().ButtonTextAlign = imgui.ImVec2(0.5, 0.5) + imgui.GetStyle().SelectableTextAlign = imgui.ImVec2(0.5, 0.5) + imgui.GetStyle().Colors[imgui.Col.Text] = imgui.ImVec4(1.00, 1.00, 1.00, 1.00) + imgui.GetStyle().Colors[imgui.Col.TextDisabled] = imgui.ImVec4(0.50, 0.50, 0.50, 1.00) + imgui.GetStyle().Colors[imgui.Col.WindowBg] = imgui.ImVec4(0.07, 0.07, 0.07, 1.00) + imgui.GetStyle().Colors[imgui.Col.ChildBg] = imgui.ImVec4(0.07, 0.07, 0.07, 1.00) + imgui.GetStyle().Colors[imgui.Col.PopupBg] = imgui.ImVec4(0.07, 0.07, 0.07, 1.00) + imgui.GetStyle().Colors[imgui.Col.Border] = imgui.ImVec4(0.25, 0.25, 0.26, 0.54) + imgui.GetStyle().Colors[imgui.Col.BorderShadow] = imgui.ImVec4(0.00, 0.00, 0.00, 0.00) + imgui.GetStyle().Colors[imgui.Col.FrameBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.FrameBgHovered] = imgui.ImVec4(0.25, 0.25, 0.26, 1.00) + imgui.GetStyle().Colors[imgui.Col.FrameBgActive] = imgui.ImVec4(0.25, 0.25, 0.26, 1.00) + imgui.GetStyle().Colors[imgui.Col.TitleBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.TitleBgActive] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.TitleBgCollapsed] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.MenuBarBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.ScrollbarBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.ScrollbarGrab] = imgui.ImVec4(0.00, 0.00, 0.00, 1.00) + imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabHovered] = imgui.ImVec4(0.41, 0.41, 0.41, 1.00) + imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabActive] = imgui.ImVec4(0.51, 0.51, 0.51, 1.00) + imgui.GetStyle().Colors[imgui.Col.CheckMark] = imgui.ImVec4(1.00, 1.00, 1.00, 1.00) + imgui.GetStyle().Colors[imgui.Col.SliderGrab] = imgui.ImVec4(0.21, 0.20, 0.20, 1.00) + imgui.GetStyle().Colors[imgui.Col.SliderGrabActive] = imgui.ImVec4(0.21, 0.20, 0.20, 1.00) + imgui.GetStyle().Colors[imgui.Col.Button] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.ButtonHovered] = imgui.ImVec4(0.21, 0.20, 0.20, 1.00) + imgui.GetStyle().Colors[imgui.Col.ButtonActive] = imgui.ImVec4(1.00, 1.00, 1.00, 1.00) + imgui.GetStyle().Colors[imgui.Col.Header] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.HeaderHovered] = imgui.ImVec4(0.20, 0.20, 0.20, 1.00) + imgui.GetStyle().Colors[imgui.Col.HeaderActive] = imgui.ImVec4(0.47, 0.47, 0.47, 1.00) + imgui.GetStyle().Colors[imgui.Col.Separator] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.SeparatorHovered] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.SeparatorActive] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.ResizeGrip] = imgui.ImVec4(1.00, 1.00, 1.00, 0.25) + imgui.GetStyle().Colors[imgui.Col.ResizeGripHovered] = imgui.ImVec4(1.00, 1.00, 1.00, 0.67) + imgui.GetStyle().Colors[imgui.Col.ResizeGripActive] = imgui.ImVec4(1.00, 1.00, 1.00, 0.95) + imgui.GetStyle().Colors[imgui.Col.Tab] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00) + imgui.GetStyle().Colors[imgui.Col.TabHovered] = imgui.ImVec4(0.28, 0.28, 0.28, 1.00) + imgui.GetStyle().Colors[imgui.Col.TabActive] = imgui.ImVec4(0.30, 0.30, 0.30, 1.00) + imgui.GetStyle().Colors[imgui.Col.TabUnfocused] = imgui.ImVec4(0.07, 0.10, 0.15, 0.97) + imgui.GetStyle().Colors[imgui.Col.TabUnfocusedActive] = imgui.ImVec4(0.14, 0.26, 0.42, 1.00) + imgui.GetStyle().Colors[imgui.Col.PlotLines] = imgui.ImVec4(0.61, 0.61, 0.61, 1.00) + imgui.GetStyle().Colors[imgui.Col.PlotLinesHovered] = imgui.ImVec4(1.00, 0.43, 0.35, 1.00) + imgui.GetStyle().Colors[imgui.Col.PlotHistogram] = imgui.ImVec4(0.90, 0.70, 0.00, 1.00) + imgui.GetStyle().Colors[imgui.Col.PlotHistogramHovered] = imgui.ImVec4(1.00, 0.60, 0.00, 1.00) + imgui.GetStyle().Colors[imgui.Col.TextSelectedBg] = imgui.ImVec4(1.00, 0.00, 0.00, 0.35) + imgui.GetStyle().Colors[imgui.Col.DragDropTarget] = imgui.ImVec4(1.00, 1.00, 0.00, 0.90) + imgui.GetStyle().Colors[imgui.Col.NavHighlight] = imgui.ImVec4(0.26, 0.59, 0.98, 1.00) + imgui.GetStyle().Colors[imgui.Col.NavWindowingHighlight] = imgui.ImVec4(1.00, 1.00, 1.00, 0.70) + imgui.GetStyle().Colors[imgui.Col.NavWindowingDimBg] = imgui.ImVec4(0.80, 0.80, 0.80, 0.20) + imgui.GetStyle().Colors[imgui.Col.ModalWindowDimBg] = imgui.ImVec4(0.00, 0.00, 0.00, 0.70) + + local but_orig = imgui.Button + imgui.Button = function(...) + imgui.PushStyleColor(imgui.Col.Text, imgui.ImVec4(1.00, 1.00, 1.00, 1.00)) + imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(0.12, 0.12, 0.12, 1.00)) + imgui.PushStyleColor(imgui.Col.ButtonHovered, imgui.ImVec4(0.21, 0.20, 0.20, 1.00)) + imgui.PushStyleColor(imgui.Col.ButtonActive, imgui.ImVec4(0.41, 0.41, 0.41, 1.00)) + local result = but_orig(...) + imgui.PopStyleColor(4) + return result + end +end + +script_image = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\xC8\x00\x00\x00\xC8\x08\x06\x00\x00\x00\xAD\x58\xAE\x9E\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0B\x13\x00\x00\x0B\x13\x01\x00\x9A\x9C\x18\x00\x00\x17\x28\x49\x44\x41\x54\x78\x9C\xED\x9D\x79\x9C\x15\xD5\x95\xC7\xBF\xA0\x82\xEC\x36\x28\x88\x5B\x10\x44\x8D\x2B\xDA\x44\x31\x71\x34\x2A\xA8\x71\x37\x4A\x66\xC6\x8C\x19\x83\xB1\xC9\x18\x63\xCC\xC4\x04\x9C\x89\xD9\xC6\x89\x10\x93\x31\xF1\x93\x31\xD2\x6A\xD4\xA0\xC9\x47\x50\x27\xD1\xC4\x95\x89\x1B\x2E\x41\x08\xE2\x12\xB7\x11\x23\xE0\x12\x44\x9A\x28\x02\x8A\xF1\xCD\x1F\xE7\x95\xFD\xE8\xEE\x57\x75\x6F\x55\xDD\xBA\xB7\xDE\x3B\xDF\xCF\xA7\x3E\xBD\xD5\x72\xBA\x5E\xFD\xEA\xDE\x7B\xEE\xB9\xE7\xF4\xAA\x54\x2A\x28\x8A\xD2\x33\xBD\x7D\x1B\xA0\x28\x21\xA3\x02\x51\x94\x18\x54\x20\x8A\x12\x83\x0A\x44\x51\x62\x50\x81\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xA0\x02\x51\x94\x18\x54\x20\x8A\x12\x83\x0A\x44\x51\x62\x50\x81\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xB0\xB9\x6F\x03\x9A\x98\x2D\x81\xE1\xC0\xD6\xC0\xB0\xEA\x36\x1C\x18\x02\xF4\x01\xFA\x22\x2F\xB0\xBE\xC0\x66\x40\xB4\xF4\xB3\x57\xF5\xEB\x7A\xE0\x1D\x60\x6D\xF5\xEB\x6A\xA0\xA3\xBA\xBD\x09\xBC\x5E\xFD\x9B\x92\x01\x15\x88\x7B\xFA\x02\xDB\x01\xBB\x00\xFB\x00\x7B\x56\xBF\xDF\x1E\x11\xC5\x10\x07\xD7\x5C\x0F\xAC\x04\xFE\x52\xDD\x9E\x07\x9E\x06\x9E\x04\x5E\xAD\x6E\x8A\x01\xBD\x74\x4D\x7A\xEE\xF4\x03\x5A\xAB\xDB\x47\x81\x03\x81\xBD\x08\xE7\x65\xB4\x06\x58\x0C\x2C\x01\x9E\x03\x1E\x44\xC4\xA3\xF4\x80\x0A\x24\x1F\xF6\x00\xC6\x03\xC7\x01\x13\x80\x1D\xFD\x9A\x63\xC5\x3A\x60\x29\x30\x1F\xB8\x1B\x58\x00\xBC\xE2\xD5\xA2\x80\x50\x81\xA4\x63\x0B\xE0\x00\xE0\x54\x44\x10\x13\xFC\x9A\x93\x2B\x6B\x80\x47\x80\x3B\x80\xDF\x21\xE2\x69\x5A\x54\x20\x76\xB4\x02\x47\x01\x27\x23\x2D\x46\xA3\xB3\x0E\xB8\xBD\xBA\xDD\x8A\x0C\xFE\x9B\x0A\x15\x48\x32\x5B\x01\x27\x00\x53\x80\x83\x11\x8F\x52\x33\xF2\x1A\x70\x0B\x30\x1B\xF8\x83\x67\x5B\x0A\x43\x05\x52\x9F\x7D\x80\xD3\x80\x7F\x00\x3E\xE2\xD9\x96\xD0\xB8\x03\xB8\x1C\xF8\xAD\x6F\x43\x5C\xA3\x02\xE9\xCE\x78\xE0\x3C\x64\x7C\xD1\xB7\x80\xEB\xBD\x03\xBC\x84\xB8\x63\x57\x02\xAB\x10\x37\xEC\x06\x60\x63\xF5\xEB\x7B\xC8\xFC\xC7\x20\x60\x20\xD0\x1F\x18\x0C\x0C\x05\x46\x02\x23\x6A\xB6\x22\xF9\x5F\xE0\xA7\xC0\xAF\x0B\xBE\x6E\x61\xA8\x40\x3A\x39\x04\xF8\x0A\xF0\x69\x87\xD7\x58\x07\xBC\x00\x3C\x06\xFC\x11\x78\x16\x11\xC7\x0A\xE0\xFD\x0C\xE7\xDD\x8C\xCE\x89\xC6\x91\xC0\xDE\xC0\x38\x60\x77\x60\x27\xDC\x0B\xE7\x09\xE0\x32\xE0\x6A\xC7\xD7\x29\x1C\x15\x08\x7C\x0C\xB8\x00\x19\x78\xBB\xE0\x59\xE0\x5E\x60\x21\xF0\x28\xF0\x27\x47\xD7\xA9\xC7\x08\x64\x1E\x66\x1C\xE2\x79\x3B\x00\x18\xE5\xE8\x5A\xF7\x03\xDF\x47\xDC\xC5\x0D\x41\x33\x0B\xA4\x05\x98\x06\x7C\x8D\xFC\x27\xF1\x96\x20\xA2\xB8\x15\x69\x2D\x42\x0A\xF9\xD8\x0A\xD8\x15\x38\x1C\xF8\x24\xE2\x78\x18\x90\xF3\x35\xAE\x05\xBE\x03\xBC\x9C\xF3\x79\x0B\xA7\x59\x05\xF2\x2F\xC0\xBF\x23\xE1\x1E\x79\xF1\x0A\x70\x73\x75\x7B\x20\xC7\xF3\xBA\x66\x67\x64\xB6\xFF\x53\xC0\x11\xE4\x77\x4F\xD6\x02\xFF\x05\xFC\x27\x32\x86\x2A\x25\xCD\x26\x90\xDD\x81\x8B\x81\x93\x72\x3C\xE7\xBD\xC0\x0D\xC0\xFF\x20\x01\x83\x65\x66\x18\x12\x0D\x70\x32\x22\x98\x3E\x39\x9C\xF3\x31\xA4\x95\x7E\x30\x87\x73\x15\x4E\x33\x09\x64\x2A\xF0\x23\xF2\xEB\x4E\xDC\x0C\x5C\x09\xDC\x95\xD3\xF9\x42\x63\x57\xE0\x14\xC4\xD5\xBD\x57\x0E\xE7\xBB\x04\xF8\x46\x0E\xE7\x29\x94\x66\x10\xC8\x08\xE4\xC3\x39\x3D\x87\x73\x55\x80\xEB\x81\x1F\x23\x5E\xA8\x66\xE1\x64\xE0\x0B\xC0\x31\x19\xCF\xF3\x08\x70\x36\xF0\x78\x56\x83\x8A\xA2\xD1\x05\xD2\x8A\x0C\x18\xF3\x78\x03\xDE\x0C\x5C\x0A\x3C\x94\xC3\xB9\xCA\xCA\x91\x48\x44\xC1\xDF\x67\x38\xC7\x2A\x64\x0C\x78\x53\x2E\x16\x39\xA6\x91\x05\xD2\x86\xCC\xF6\x66\x0D\x0D\xF9\x3D\x70\x11\x32\xD6\x50\x84\x7D\x91\xEE\xD2\x69\x19\xCE\x71\x21\x72\x5F\x83\xA6\x51\x05\xF2\x63\x64\xD2\x2F\x0B\x4B\x91\x01\xFD\x55\x99\xAD\x69\x5C\x0E\x46\xBC\x81\x47\xA7\x3C\xFE\x46\xE0\x9F\x81\x77\x73\xB3\x28\x67\x1A\x4D\x20\x5B\x02\xD7\x20\xF1\x53\x59\xF8\x19\xF0\x5D\x24\xFC\x43\x49\xE6\x73\xC0\xF7\x48\x17\xB3\x76\x27\x30\x99\xB0\xE6\x8A\x3E\xA4\x91\x04\x32\x1C\x99\x98\x3B\x30\xC3\x39\x9E\x46\x66\xD5\x6F\xCB\xC5\xA2\xE6\x62\x10\xF2\x52\xF9\x6A\x8A\x63\x97\x00\x27\x12\xE0\xC4\x62\xA3\x08\x64\x7B\xE4\xA1\xDE\x2F\xC3\x39\xAE\x42\xC4\xB1\x2A\x17\x8B\x9A\x97\x23\x80\x1F\x22\xA1\x2D\x36\xFC\x09\x59\x6B\xB3\x22\x6F\x83\xB2\xD0\x08\x02\xD9\x0E\x69\xA6\xF7\x4E\x79\xFC\x06\x64\xBC\xD2\x9E\x9B\x45\x4A\x1F\x24\x78\x71\xAA\xE5\x71\x4F\x21\x21\x30\x6F\xE4\x6E\x51\x4A\xCA\x2E\x90\x11\x88\x97\x69\x8F\x94\xC7\x3F\x86\x0C\x12\x9F\xC9\xCD\x22\xA5\x96\x29\xC0\x15\xC8\x12\x65\x53\x16\x02\x93\x90\xA5\xBF\xDE\x29\xB3\x40\x06\x00\xF3\x48\xBF\x1E\xFC\x16\xE0\x4C\x02\xF9\x20\x1A\x98\x89\xC8\xE4\xAA\x4D\xC8\xFD\xBD\x48\x57\xCD\xFB\xC3\x59\xE6\xCC\x8A\x73\x48\x2F\x8E\x4B\x90\x30\x8A\x35\xB9\x59\xA3\xD4\x63\x1E\xB2\xD6\xC6\xA6\x95\x3E\x8C\x40\xDC\xEB\x65\x15\xC8\x2C\xD2\x87\x3D\x7C\x95\x12\xC6\x04\x95\x9C\xE7\x91\x6E\x93\x4D\x78\xCE\x14\xE0\x9B\x6E\xCC\x31\xA7\x8C\x5D\xAC\xCF\x03\x3F\x4F\x79\xEC\x14\x64\x9E\x44\xF1\xC3\x08\x24\x43\xCA\xFE\x16\xC7\x4C\x44\x96\xF6\x7A\xA1\x6C\x02\x39\x80\xF4\x19\x35\x3E\x03\xCC\xCD\xD1\x16\x25\x1D\x43\x80\xFB\x30\x77\x03\xAF\x42\x62\xE9\xBC\x4C\xDA\x96\xA9\x8B\x35\x10\x19\xEC\xA5\xE1\xB3\xA8\x38\x42\xE1\xAF\xC8\xA4\xE0\x72\xC3\xFD\xB7\x46\x22\x1B\xBC\x50\x26\x81\x5C\x0A\x8C\x4D\x71\xDC\x54\xE0\x97\x39\xDB\xA2\x64\x63\x19\x22\x92\xB7\x0D\xF7\x3F\x19\xE9\x1E\x17\x4E\x59\xBA\x58\x47\x23\xB9\x98\x6C\xF9\x26\xB2\xE4\x53\x09\x93\x63\x90\xF4\xA6\x26\xAC\x43\x5E\x90\x85\x66\xA6\x2F\x43\x0B\xD2\x0F\x99\x95\xB5\xE5\x7A\x54\x1C\xA1\x73\x3B\xF0\x2D\xC3\x7D\xFB\x23\x19\x53\x0A\xA5\x0C\x2D\xC8\x0F\x80\xAF\x5B\x1E\xF3\x04\x12\xB4\xB8\x21\x7F\x73\x14\x07\xCC\x43\x26\x06\x4D\x38\x84\x02\xD7\xB7\x87\x2E\x90\xD1\x48\x5E\x29\x9B\x50\x85\xB7\x10\x6F\xD7\x73\x4E\x2C\x52\x5C\xB0\x23\x32\x47\xB2\xB5\xC1\xBE\x8F\x00\x1F\x77\x6B\x4E\x27\xA1\x77\xB1\xBE\x8D\x9D\x38\x40\x22\x72\x55\x1C\xE5\x62\x39\xB2\xF0\xCA\x84\x83\xC8\xBE\x36\xDE\x98\x90\x5B\x90\x7D\xB1\x5F\xDC\x7F\x27\x92\xAE\x46\x29\x27\x0B\x90\x4C\x97\x49\x2C\xC6\x6E\xB2\x31\x35\x21\xB7\x20\xB6\x0B\x6F\xDE\x06\xCE\x75\x61\x88\x52\x18\xA6\x21\x40\xFB\x21\x63\x11\xE7\x84\x2A\x90\xB1\xC0\x3F\x5A\x1E\x73\x29\x92\x18\x5A\x29\x2F\xF7\x21\x9E\x2D\x13\x0A\x79\x19\x86\x2A\x90\x2F\x62\x97\xD5\x6F\x25\xB2\x8A\x4D\x29\x3F\x17\x1B\xEE\x77\x0A\x52\x31\xD8\x29\x21\x0A\x64\x4B\xEC\x93\x2E\x5C\x86\xF9\xAC\xAC\x12\x36\xF3\x81\x87\x0D\xF7\x9D\xEC\xD2\x10\x08\x53\x20\xC7\x22\xCB\x68\x4D\x79\x03\x8F\xB1\x3A\x8A\x13\xAE\x30\xDC\xEF\x54\xA4\xB0\x90\x33\x42\x14\xC8\xA9\x96\xFB\xDF\x40\xF9\x93\x46\x2B\x9B\x72\x3B\x12\xD4\x98\xC4\x9E\x38\x2E\xA6\x1A\x9A\x40\x86\x21\x0B\x6B\x6C\xD0\x40\xC4\xC6\xE3\x4D\xCC\x33\x59\x1E\xE5\xD2\x90\xD0\x04\x72\x18\x22\x12\x53\x1E\x47\x12\x2F\x28\x8D\x87\x69\xD6\x7C\xA7\x93\x86\xA1\x09\xE4\x60\xCB\xFD\x1B\xBE\xCA\x6A\x13\x73\x1F\x66\x85\x77\xF6\x02\xB6\x75\x65\x44\x48\x02\xE9\x85\x7D\x12\x86\x86\xA9\x85\xA7\x74\xE3\x39\x24\xD3\x65\x12\x83\xB0\x4F\x52\x67\x4C\x48\x02\xD9\x09\xBB\x32\x05\xAF\x21\x51\xBB\x4A\x63\x52\x41\x02\x13\x4D\x18\xE7\xCA\x88\x90\x04\xB2\x3B\x76\xD5\x9F\x9E\xC6\xCC\xD3\xA1\x94\x17\xD3\x8A\xC0\xBB\xB9\x32\x20\x24\x81\xD8\xE6\xD5\x35\x5D\xD3\xAC\x94\x97\x97\x0C\xF7\xDB\x0D\xD8\xC6\x85\x01\x79\x97\x3F\xCE\xC2\x2E\x96\xFB\xE7\x35\x73\xBE\x19\xB2\x6A\xB1\x3F\x32\x8B\xDF\x07\x69\xDE\x7B\x55\xBF\xAE\x47\xD6\x98\x6C\x00\xDE\xCF\xE9\x9A\x8A\x19\x2B\xE9\xFC\x2C\xE2\x18\x83\x0C\xD4\x73\xCF\xE9\x1B\x92\x40\x76\xB4\xDC\xDF\xF6\x66\xEC\x80\x88\xF0\x23\xC8\x0D\xDD\x11\xC9\xD3\x34\x02\xA9\x1D\xDE\x07\x59\x7B\xB2\x39\x9B\x0A\xE4\x3D\x44\x1C\x6B\x11\xFF\xFC\xAB\x48\x06\xF2\x15\xC0\x8B\xC8\x5B\xEE\xCF\xE8\xEA\x45\x17\xAC\x47\xEE\x7F\xDF\x84\xFD\x86\x60\xB6\xD8\xCA\x9A\x90\x04\x62\x9B\xBB\x35\x2E\x01\x5C\x6F\x44\x04\x07\x21\xD9\xC2\xF7\x41\xEA\x81\x6F\x95\xD6\xB8\x18\xDE\x43\xBA\x7B\xCF\x20\x89\x97\x17\x00\x8B\x90\xB7\x9F\x92\x8D\xF7\x80\x8D\x24\x0B\xA4\x2F\xF9\xD6\xBC\xFF\x90\x50\x04\xD2\x0F\x79\x0B\x24\xB1\x0A\x09\x6B\x9F\x09\xFC\xAD\xCB\xDF\xB6\x40\x8A\x4C\x1E\x0E\x7C\x02\xF1\x6C\x24\xDD\xD8\x3C\xE8\x83\x88\x71\x0C\x52\x63\x1C\xE0\x75\x64\xDD\xF4\x83\xC8\x84\xD7\xF3\x05\xD8\xD1\xEC\x0C\x75\x71\xD2\x50\x04\xD2\x02\x0C\x4E\xD8\xA7\x1D\x49\xE0\xF0\x62\x97\xDF\x1F\x08\x9C\x80\xE4\x4E\xFA\x68\xFE\xA6\xA5\x62\x5B\x24\xD2\x34\x2A\x2D\xF6\x30\x52\x25\xF7\x36\xC4\x3D\xAD\xE4\x4F\x3F\x17\x27\x0D\x45\x20\x83\x90\xCC\x89\x3D\xF1\x2B\x24\x1B\xFB\xE2\x9A\xDF\x0D\x40\xEA\x9E\x4F\xC1\x6C\x89\xA6\x4F\x06\x22\x2D\xDB\x91\x48\x1A\xA2\xDB\x80\xEB\x80\xFB\x7D\x1A\x55\x12\x2A\x98\x97\x40\xD8\xD2\x85\x01\xA1\xB8\x79\x07\xD2\x7D\x81\xD4\x03\x48\x20\xDA\x69\x74\x8A\x63\x24\x70\x3E\xD2\xC7\xFF\x19\xE1\x8B\xA3\x2B\x5B\x23\xC9\xB7\xEF\x43\xEA\x29\x1E\xEB\xD5\x9A\xF0\xD9\x0C\xF3\x32\xDE\x4E\xC2\xDE\x43\x11\x48\xFF\x9A\xEF\x5F\x42\xAA\xA6\x1E\x4A\x67\x28\x49\x3F\x24\xC3\xC9\x13\x48\x6B\xE2\x6C\x62\xA8\x40\x8E\x47\x62\xC9\xEE\xC2\x3E\x82\xB9\x59\xE8\x8B\xF9\xCA\xD2\xF5\x2E\x0C\x08\x45\x20\x83\x11\x37\xE9\x45\x88\xC7\x69\x76\xCD\xDF\x4E\x47\x72\x26\x7D\x07\x47\xAE\x3C\xCF\x1C\x89\xBC\x08\x7E\x83\x64\x72\x51\x3A\xE9\x87\xF9\x30\x60\x9D\x0B\x03\x42\x11\xC8\x13\x48\xB2\xB7\x0B\xE9\xAC\x97\xBD\x17\xD2\x5F\xFF\x05\x12\x86\xD2\xE8\x9C\x80\x2C\x37\xBD\x90\x70\x3E\x17\xDF\xD8\xBC\x10\x1B\x5A\x20\xCB\x81\x27\x6B\x7E\x3E\x1F\x19\x77\x1C\xD7\xF3\xEE\x0D\xCB\x40\xE0\x7B\x48\x0D\x94\x56\xCF\xB6\x84\xC0\x68\xC3\xFD\x36\x02\xAF\xB8\x30\x20\x14\x81\x44\xEC\x8C\x74\x35\x2E\x21\x1C\x0F\x9B\x0F\xC6\x23\x03\xF9\xF3\xFC\x9A\xE1\x1D\xD3\xAC\x25\xAB\x71\x54\x5F\x3D\x24\x81\x4C\x42\x3C\x57\x27\xF8\x36\x24\x10\x06\x22\x93\xA2\xED\xD8\xA5\x40\x6A\x14\x7A\x63\x9E\x83\xF7\x15\x1C\xE5\x25\x08\x45\x20\x6D\xC8\x40\x75\x07\xDF\x86\x04\xC8\x59\xC8\x44\xE3\x28\xCF\x76\x14\x4D\x2B\xB0\xB7\xE1\xBE\xCF\xE0\xA8\x44\x5B\x08\x02\xB9\x00\xA9\x5A\xAB\xD4\xA7\x15\x79\x81\xEC\xEA\xDB\x90\x02\xB1\x49\xC6\xB0\x84\xEE\xA1\x47\xB9\xE0\x5B\x20\x17\xE0\xA1\x28\x4A\x49\x19\x8B\x8C\x4B\x6C\x56\x5D\x96\x19\x9B\x49\x54\x93\xA5\xB9\xA9\xF0\x99\xDD\xFD\x5C\xE0\x27\xBE\x2E\x5E\x62\x56\x02\x7F\x47\x63\x07\x40\xEE\x09\x3C\x65\xB8\xEF\x5A\xA4\x65\x75\x12\xE3\xE6\xAB\x05\x39\x09\x15\x47\x5A\x86\x23\x9E\xBE\xE1\xBE\x0D\x71\xC8\x67\x2C\xF6\x5D\x88\xC3\x00\x50\x1F\x02\x19\x0B\xDC\xE4\xE1\xBA\x8D\xC4\xEE\x48\xF6\x41\xDB\xE2\x42\x65\xA0\x1F\x70\xA6\xC5\xFE\x4E\x53\x3F\x15\x2D\x90\xCD\x91\xE2\x9A\xA6\x01\x68\x4A\x7D\x5A\x81\xAB\x7D\x1B\xE1\x80\x53\xB0\x5B\xFC\x94\xA6\xFA\xB1\x31\x45\x0B\xE4\xBB\x48\x48\x89\x92\x0F\xA7\x23\x75\xE0\x1B\x89\x73\x2C\xF6\x5D\x80\x79\xE6\x93\x54\x14\x29\x90\x83\x81\x7F\x2B\xF0\x7A\xCD\xC2\x15\x34\x8E\x67\xEB\x44\x64\x01\x9C\x29\xB3\x93\x77\xC9\x46\x51\x5E\xAC\xCD\x91\xD8\xAA\x46\xF9\x20\x43\xE3\x01\x64\x79\x40\xD9\x79\x0C\xF3\x6C\xED\x6B\x91\xF1\xEC\xEB\xEE\xCC\x29\xAE\x05\x99\x8A\x8A\xC3\x25\x87\x20\x55\xB9\xCA\xCC\xC9\xD8\x95\x32\xF8\x15\x8E\xC5\x01\xC5\xB4\x20\xC3\x90\x5A\xE7\x8D\xB8\x96\x23\x24\xDE\x44\xA2\x5F\xDF\xF2\x6D\x48\x0A\x06\x20\x3D\x8C\xB1\x86\xFB\x57\x80\x3D\x90\xE7\xCA\x29\x45\xB4\x20\x67\xA3\xE2\x28\x82\x61\x48\xDC\x56\x19\xF9\x0A\xE6\xE2\x00\x29\xF7\xED\x5C\x1C\xE0\xBE\x05\xE9\x87\x64\x21\x19\xE9\xF2\x22\xCA\x87\xFC\x05\x79\xB3\x96\xA9\xE2\xD6\x28\x24\xD8\xD0\x26\xE9\xC2\x04\x64\xCD\x8C\x73\x5C\xB7\x20\x93\x51\x71\x14\xC9\x08\xEC\x66\xA1\x43\xE0\x0A\xEC\xC4\x71\x23\x05\x89\x03\xDC\x0B\xE4\x74\xC7\xE7\x57\xBA\x63\x5B\x21\xD8\x27\xA7\x61\x5F\x42\xED\x5B\x2E\x0C\xA9\x87\x4B\x81\x8C\x44\x32\x1C\x2A\xC5\x72\x28\xE6\xEB\x28\x7C\x32\x1A\xFB\xEA\xC4\x3F\xA4\xE0\x20\x4D\x97\x02\x39\x1C\x47\xD9\xEE\x94\x44\x8E\xF4\x6D\x80\x01\x57\x91\x9C\x4D\xB3\x96\x95\xC0\x7F\x38\xB2\xA5\x2E\x2E\x05\x32\xCE\xE1\xB9\x95\x78\x0E\xF3\x6D\x40\x02\xE7\x62\x6F\xE3\x97\xF1\xE0\xC2\x76\x25\x90\xC1\x68\x56\x0E\x9F\xB4\xE2\x26\x93\x7D\x1E\xEC\x8D\xAC\xB5\xB7\x61\x4E\x75\x2B\x1C\x57\x02\xD9\x0E\x3B\xBF\xB6\x92\x2F\xC3\xB1\x2F\x48\x54\x14\x97\x62\xF7\xDC\xBD\x03\x7C\xCD\x91\x2D\x89\xB8\x12\xC8\x70\x74\x72\xD0\x27\xBD\x09\x33\xC9\xC3\x29\xC0\x11\x96\xC7\x9C\x83\xA3\x94\x3E\x26\xB8\x12\xC8\x8E\x38\xCA\xB6\xAD\x18\xB3\xB3\x6F\x03\x7A\xE0\x5F\x2D\xF7\xBF\x0B\xB8\xD6\x81\x1D\xC6\xB8\x12\xC8\x20\x47\xE7\x55\xCC\x71\x52\x50\x26\x03\xBB\x62\x17\xCA\xFE\x01\x1E\xBB\x56\x11\xAE\x04\x62\x53\xCE\x59\x71\x43\xBD\x7A\x2B\xBE\x38\x1A\xBB\x95\xA4\x97\xE0\x30\x5B\x89\x29\xAE\x04\xD2\xCC\x69\x43\x43\x21\xB4\x56\x7C\x7F\x8B\x7D\xDF\x42\xCA\xEC\x79\xC7\x95\x40\xB4\x5C\xB2\x7F\x9C\x14\x94\xC9\x80\x8D\x57\xB3\x1D\xE8\x70\x65\x88\x0D\xAE\x04\xE2\xA4\x98\x89\x62\x45\x48\x65\xA9\x07\x61\x9E\xA6\x68\x03\x70\xB9\x43\x5B\xAC\x70\x25\x90\x0E\xCC\x6B\xCB\x29\x6E\x08\xE9\x25\x35\x08\xF3\xB0\xA3\xDF\x23\x55\xC6\x82\xC0\x95\x40\x5E\x47\x6A\x36\x28\xFE\x08\xA9\x4E\xFB\x16\x98\x8F\x4B\xE7\xB9\x34\xC4\x16\x57\x02\x79\x95\x02\xD6\x0B\x2B\xB1\x38\x29\x28\x93\x12\xD3\x6A\xB5\x15\xA4\x40\x6B\x30\xB8\x12\xC8\x32\x02\x70\xD1\x35\x39\x21\x09\xE4\x3D\xCC\x1C\x37\x6B\x80\x17\xDC\x9A\x62\x87\xCB\x41\xFA\x1F\x1D\x9D\x5B\x49\x66\x35\x9B\x96\xB4\xF3\xCD\x5F\x91\x98\xAA\x24\x96\x13\x58\xCF\xC3\x65\xB8\xFB\x23\x0E\xCF\xAD\xC4\xF3\x3C\x8E\x0A\xCA\xA4\x64\x3D\x66\x6E\xDB\x37\x09\xCC\xB9\xE3\x5A\x20\x65\x4C\x41\xD3\x08\x3C\xE8\xDB\x80\x1E\x58\x6E\xB0\x4F\x70\xCF\x8B\x4B\x81\xAC\x06\x7E\xE7\xF0\xFC\x4A\x7D\x6E\xF6\x6D\x40\x0F\x98\x8C\x2D\x42\x72\x4D\x03\xEE\x93\x36\x5C\xE7\xF8\xFC\x4A\x77\x9E\x21\x9B\x27\x68\x18\x52\xA0\xE7\x3C\xA4\x0E\xC9\x7D\xE4\x93\x08\xC2\xA4\x05\x71\x52\x46\x2D\x0B\xAE\x63\xA6\xEE\x42\xB2\x6F\xEF\xE1\xF8\x3A\x4A\x27\xB3\x31\xF3\x18\xF5\x47\x16\xB6\xED\x8C\x2C\xAE\xDA\x13\x59\xED\x37\x86\xEE\xE5\x07\x0E\x45\xD2\xC7\xCE\x40\x3E\xD3\x34\xBC\x6C\xB0\xCF\xBB\x29\xCF\xED\x8C\x22\x82\x0A\x2F\x01\xAE\x29\xE0\x3A\x8A\xF4\xE1\x7B\x6A\xB5\x77\xA9\x6E\xBB\x23\x82\x18\x53\xFD\x79\x27\xCC\x67\xB8\x3F\x59\xDD\x6E\x47\xB2\x8B\xDC\x6B\x69\xDB\xB3\x88\x00\xFA\x5A\x1E\xE7\x95\x22\x72\xF3\x6E\x09\x3C\x0E\xEC\xE6\xFA\x42\x0A\x3F\x02\xCE\xEF\xF2\xBB\x99\xC0\x97\xC8\x7F\x09\xC2\x2F\xAA\xD7\x7B\xC2\x70\xFF\x5E\x48\x35\xDA\xB8\x94\x44\xD7\x01\x67\x64\x33\x2B\x5F\x8A\xC8\xCD\xBB\x01\xF8\x7A\x01\xD7\x69\x76\xD6\x22\x5D\xA0\x5A\x8E\x00\xBE\x81\x9B\xF5\x39\x9F\x43\x12\x4E\xFF\x37\xD2\x22\x25\x51\x21\x59\x4C\xFD\xB3\x1A\x95\x37\x45\x95\x3F\xB8\x0D\x98\x5F\xD0\xB5\x9A\x95\x1F\x00\xAB\x6A\x7E\xEE\x0D\x5C\xE4\xF8\x9A\xBD\x91\xE4\xE4\x0B\xAA\xD7\x4F\x2A\x9D\xF6\x58\xC2\xDF\x83\x5B\x68\x57\x64\x85\xA9\xB3\x09\x6C\x12\xA8\x81\x78\x9A\xEE\x0B\x8C\xCE\x42\x92\x3C\x17\xC1\x50\xA4\x97\xB0\x00\xB8\x80\xFA\xAB\x19\x17\x26\x9C\x67\x48\x9E\x46\xE5\x41\x91\x02\x79\x12\xA9\x51\xA8\xE4\xCF\x17\x91\x78\xA7\x88\xED\x11\xE7\x48\xD1\x6C\x07\x7C\x1F\xF9\xAC\xBF\x44\xF7\x01\xF9\x12\xE2\xBD\x59\x23\x81\x3E\x6E\x4C\x4B\x47\xD1\x45\x3C\x67\xE2\xB8\xE8\x62\x13\x72\x31\xDD\xBB\xAF\x3F\xC5\xEF\x92\xDB\x51\x55\x1B\x1E\x46\x12\x54\x47\xCF\xD9\x5A\xE2\xE7\x68\xB6\x06\xB6\x75\x6A\x99\x25\x45\x0B\x64\x03\xE5\x2F\x15\x16\x12\x8F\xD0\xBD\x30\xEA\x59\xC0\x49\x29\xCE\xF5\x3E\xF0\x28\x70\x25\xC9\x5D\x21\x53\xF6\x07\x6E\x00\x1E\xA2\x73\xB2\xF1\x96\x98\xFD\x07\x13\x98\xB7\xD3\x47\x72\x85\x07\x91\x41\xFB\xF1\x1E\xAE\xDD\x48\x2C\xA3\x7B\x2D\x90\x03\x90\x37\xB7\x29\x2F\x23\x05\x40\xE7\x23\xE2\x88\xBC\x4C\xBD\x81\x4F\x03\xFF\x04\x9C\x40\xF6\xF5\xED\x13\xAA\xDB\x29\x48\x12\xB8\x8D\xC8\x22\xAA\x9E\xD8\x07\xB8\x27\xE3\xF5\x72\xA3\xA8\x2A\xB7\x5D\x99\x80\x46\xFB\x66\x61\x1D\x32\xBB\x5D\xFB\xA6\xDF\x01\xE9\xE3\xD7\xCB\x87\xB5\x11\xF8\x3F\x24\x14\x65\x21\x22\x88\x25\x24\x57\xA3\xFA\x38\x52\xE7\xE5\x54\xF2\xCB\x96\xF9\x01\xF5\x7B\x2F\xD7\x13\x50\x5D\x19\x5F\x02\x01\xB8\x1B\x98\xE4\xEB\xE2\x25\xE7\x28\xE4\xFE\x45\x0C\x45\xDE\xBA\xFB\x03\xAF\x21\xA1\xEE\xCB\xAB\xDB\x73\xC0\x52\xA4\x14\xDE\x4B\xA4\x4F\xE6\x30\x12\x79\x70\x4F\xC7\x6D\xC5\xE2\xE7\x90\xCA\x00\x41\x24\x9D\xF0\x29\x90\x33\xD0\x10\x14\x5B\xD6\x20\x83\xDE\x3B\xBA\xFC\x7E\x04\x12\x60\xF8\x02\xD2\x85\xE9\x40\xDE\xD2\x2E\xE8\x83\x74\x8F\xCF\x00\x8E\x73\x70\xFE\x0F\x80\xFD\x30\x9F\xA1\x77\x8A\x4F\x81\xEC\x84\xC4\xE7\x68\x91\x1D\x33\x3A\x80\x13\x09\x6B\xAD\xC7\x04\xE0\xF3\x48\xF7\x2B\xCF\x54\xA7\xE7\x20\x33\xF4\xDE\x29\xDA\x8B\x55\xCB\x32\xA4\x0F\xAC\x24\x33\x1F\xD8\x97\xB0\xC4\x01\x32\x8E\x99\x8A\xC4\x57\x9D\x0F\x3C\x95\xD3\x79\x3F\x95\xD3\x79\x32\xE3\x53\x20\x20\xFD\x4D\x25\x9E\x6B\x80\x63\x30\x5B\x4F\xE1\x8B\x57\x91\xC0\xC5\x8F\x21\xEE\xDC\xDF\x66\x3C\xDF\x01\x04\x92\x5B\xD8\xB7\x40\x96\x79\xBE\x7E\xC8\xBC\x8D\xCC\x19\x4D\xA9\x7E\x5F\x06\x36\x20\x65\x9A\x8F\x07\x0E\x42\x8A\x74\xA6\xA9\xD9\xBE\x0D\x81\x14\x80\xF5\x2D\x90\x35\x9E\xAF\x1F\x2A\xBF\x41\x3C\x39\xB3\x3C\xDB\x91\x85\x47\x91\xF8\xBB\x7D\x91\x88\xE2\xC5\x96\xC7\x9F\x98\xBB\x45\x29\xF0\x2D\x10\xCD\xBE\xB8\x29\x2F\x21\x2D\xC6\x49\x88\x6B\xB6\x11\x58\x81\xC4\x85\x1D\x88\x4C\x3C\xDE\x1D\xBF\xFB\x87\x1C\x4B\x00\xE1\xEF\xBE\x05\x62\x53\x06\xB8\x91\x79\x1B\x09\x17\x1F\x47\xE3\xBA\xBE\x37\x22\x61\x27\x47\x21\xF3\x35\x97\x03\x6F\xC4\xEC\xBF\x13\x52\x53\xC4\x2B\xBE\x05\xD2\xEC\x75\x0C\xD7\x02\x3F\x41\xAA\xD2\x4E\x23\xC0\xB4\x37\x8E\x58\x8C\x44\xFB\x8E\x43\xCA\xB2\xD5\x0B\x60\x3C\xAD\x28\x83\xEA\xE1\x73\x1E\x04\x60\x2E\xE2\x43\x6F\x36\x5E\x46\xDE\xA6\xD7\x21\x49\xDE\x9A\x9D\x3E\x48\x97\xEA\x2C\x36\x75\xF1\xBE\x8B\xAC\x9D\xF7\x56\xC4\xD3\xB7\x40\x16\xD2\x3C\xF5\xD4\xD7\x21\xF3\x19\x73\x11\x4F\x4F\x59\x3C\x53\x45\xB3\x07\xF0\x59\xE0\x4C\x24\x42\x60\x36\xB2\xBC\xD7\x0B\x3E\x05\x32\x04\x79\x7B\x9A\x16\x56\x31\xA1\x03\x19\xDC\xEE\x45\x18\xD9\x33\xD6\x03\xF7\x23\xC2\xF8\x35\x9A\xD0\xDB\x86\xE1\xC0\x17\x90\x6E\xD8\x59\x48\x7E\xDF\xC2\xF1\x29\x90\x4F\x90\xDF\x3A\xF5\x65\x48\x97\xA5\x1D\x69\x8E\x77\x06\xC6\x03\x87\x54\xBF\x8E\xA2\x98\xF1\xCE\x3A\x24\x62\x76\x31\x12\x2F\xF5\x07\xE0\xCF\x05\x5C\xB7\xD1\xE9\x8F\xDC\xDB\xC2\xF1\x29\x90\x2F\x03\x97\x65\x3C\xC7\x43\xC0\xD5\x48\xAA\xCD\xB8\x01\xEE\x76\x48\xD3\xBD\x27\xD2\xBA\x8C\x45\xC2\xC3\xB7\x21\x9D\x27\x6D\x03\xD2\x5A\x2D\x47\x04\xF0\x14\x12\x5C\xF7\x34\x22\x10\xA5\x41\xF0\x59\x8D\xF6\xA0\x94\xC7\xFD\x0D\xB8\x09\xC9\xCB\x74\xBB\xE1\x31\xAF\x56\xB7\xDA\xEA\x45\x03\x90\x34\x9B\xA3\x90\xD6\x65\xAB\x9A\x6D\x33\x3A\x13\x4C\xF4\x42\xBA\x4A\x6F\x22\x13\x9B\x1D\x48\x2B\xF5\x0A\x22\xCA\xE0\xD2\x65\x2A\xF9\xE1\xAB\x05\x19\x80\xC4\x61\x25\xA5\x89\xA9\x65\x05\xB2\x98\xE6\x5A\x34\x86\x4B\x29\x08\x5F\x2D\xC8\x81\x98\x8B\xE3\x21\xC4\x93\x71\x23\x1A\x9A\xA2\x14\x8C\x2F\x81\x1C\x95\xF0\xF7\xF7\x81\x5B\x91\xF1\xC5\x9D\xB8\x5B\xFC\xA3\x28\xB1\xF8\x12\xC8\xB1\x75\x7E\xBF\x02\xE9\x42\xCD\x46\x27\xD0\x94\x00\xF0\x21\x90\x7D\x11\x6F\x52\x2D\xF3\x11\x51\xCC\x41\xBB\x51\x4A\x40\xF8\x10\xC8\x79\xD5\xAF\xEB\x91\xB0\xEE\x2B\x91\xE2\xF1\x8A\x12\x1C\x45\x7B\xB1\x06\x23\x63\x8B\xFB\x91\x16\x43\xE7\x0C\x94\xA0\xF1\x1D\x8B\xA5\x28\x41\xE3\x3B\xDC\x5D\x51\x82\x46\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xE0\x33\x58\x51\xC9\xCE\x68\x60\x22\xD0\x82\x2C\x3C\x6B\xA9\xF9\xDB\x22\x24\xB0\x72\x51\xCD\xF7\x8A\x2D\x95\x4A\x25\xCD\x36\xB1\x92\x4C\xD2\x39\x5A\x0D\xCE\x51\xA9\x54\x2A\x6D\x19\xAF\x99\x87\xAD\x45\xDC\x0F\xD3\xAD\xA5\x52\xA9\x4C\xAB\x54\x2A\x2F\x1A\x5C\xB3\x96\x85\x15\xB9\x97\x2D\x39\x5C\x7F\x75\xC2\xB5\xEE\xA9\x73\xEC\x8C\x84\xE3\x56\xA7\xB4\x6F\x9A\xC1\x79\x47\xA7\xF9\x7F\x7D\x75\xB1\x46\x63\x56\x03\x62\x26\xB2\x08\x4A\x11\x26\x23\x59\xDA\x67\x20\xF7\xD0\x86\x56\x24\xCF\xD6\x8B\x48\x82\x88\x2C\x36\xB4\x24\xEC\x33\x91\x9E\xED\x9B\x49\x7C\x3A\xA3\x16\xBA\x57\xEA\x4D\x62\x34\xC9\xFF\x4F\xD2\x75\xEB\xE2\x43\x20\x2D\x48\x48\x49\xD2\x4D\x9E\x0B\x4C\x77\x6F\x4E\x69\x98\x81\xD9\x7D\x4B\x22\x7A\x08\xD3\xE6\x03\x98\x9C\x61\xBF\x0E\x92\x3F\xD3\x36\x44\x60\xA6\xCC\x22\xFE\x9E\x2C\xA2\x7B\x81\x53\x63\x7C\x08\x64\x16\xC9\x1F\xCC\x22\x24\x29\xB2\x22\x4C\x23\xDB\x5B\xBF\x27\x5A\x91\x56\xDC\x46\x24\xD1\x98\xC7\x84\xB6\x3A\xBF\x9F\x5B\xDD\xE2\x30\xCD\x28\x69\x22\xA6\x4C\xCF\x51\xD1\x02\x99\x45\xF2\x1B\xA8\x03\x29\x2D\xA6\x83\x4A\xA1\x15\xFB\x6E\x87\x29\x2D\xD8\x89\xA4\xDE\x43\xDF\x13\x71\x62\x9A\x4A\xFC\xE7\x6B\xD2\x6D\x32\xE9\x8E\xCD\x24\xBE\x68\x68\x22\x45\x0A\xA4\x0D\xB3\x1B\x3C\x89\xC6\x49\xBB\x99\x07\x36\x0F\x65\x1A\x22\x0F\x98\x09\xA6\xDD\xAB\xA4\xFD\x3B\x48\xEE\xF6\xCC\x20\xDE\xAE\x19\xC4\x77\xAD\x96\x1A\x5C\x23\x91\xA2\x04\x32\x11\xB3\x66\x73\x2A\x19\x15\xDF\x80\x98\x08\xA4\x03\x59\x6F\x3F\xBD\xBA\xB5\xB3\xE9\xFA\xFB\xB8\xE3\x26\x61\xE6\x08\x99\x8C\xBD\x63\x20\x6E\x40\x3F\x93\x64\x1B\xEB\xB5\x10\x13\x49\xBE\x2F\x49\xAD\x94\x19\x69\x5C\x5F\x15\x3B\xB7\x66\x6B\x25\xD9\x2D\x58\xA9\x88\x0B\xD0\x85\x2B\xB5\xCC\x6E\x5E\x13\x57\xF8\xAC\x4A\xBC\x6B\xB4\xAD\x22\x6E\xD7\xAE\x2C\xAC\x9E\xDF\xD4\x96\x59\x06\xB6\xF4\x44\xE4\xA6\x4F\xFB\xFF\x4D\xEB\x72\x4C\x4B\x25\xD9\xC5\x3D\x27\xE6\x9A\x41\xB9\x79\x5B\x48\xF6\x32\x80\x7A\xAC\xEA\x61\xE2\xB1\x4A\x7A\x53\xB6\x23\xAD\xC4\x24\x3A\x5B\xE7\x79\x5D\x7E\x36\xB1\x23\x6D\x57\x2F\xAE\x5B\xB6\x88\xE4\xCF\x7D\x1A\x9B\xDE\x87\x36\xE2\x5B\xB2\x0E\x72\x74\xF0\xB8\x16\xC8\x1C\xD4\x63\x95\x05\x93\xB1\x98\xE9\x83\x1B\x89\x62\x7A\xF5\xAB\x4D\xF7\xC3\x76\xEC\x51\x4B\xBD\x39\x91\x88\x76\x92\xE7\x46\xA2\xEE\xB9\x89\xC3\x62\x26\x39\x3A\x78\x5C\x0A\x64\x16\xC9\x2E\x38\xF5\x58\xC5\xB3\x94\xE4\x7B\x33\x0B\xF1\x44\x4D\xA3\x33\xEC\xA4\x1E\x26\x83\xE3\x9E\xC8\xEA\x28\x88\x3B\xDE\xE4\x8D\x3F\xB9\xBA\x25\x89\x63\x1E\x39\x0C\xCC\x6B\x71\x29\x10\xF5\x58\xE5\x83\xC9\x60\x7B\x22\xF2\xF0\xDC\x83\x94\x3C\xAB\x20\x33\xE6\xB5\xC2\x49\xCB\x68\xCC\x7A\x01\x71\x24\xB5\x40\xF3\x48\x76\x14\xCC\x21\xF9\xFF\xC8\xBD\x9B\xEE\x33\x9A\x57\x3D\x56\x66\xA4\x0D\xB5\x89\xE6\x21\x22\xE1\x54\x30\x7B\xC8\xBA\x92\xF4\xA2\x8B\x7A\x01\x49\xB6\x24\x89\x64\x3A\xD9\x7A\x12\xD3\x71\xF0\x3C\xF9\x12\x88\xC6\x58\x99\x63\xF2\x76\x35\x65\x32\x22\x96\x17\xC9\x3E\x23\x1E\x11\x8D\x21\x92\x1E\x4E\x93\xEE\x76\xDA\x16\x20\x97\x39\x8F\x9E\xF0\x21\x90\xA5\xA8\xC7\xCA\x96\xA9\xE4\xFB\x42\x89\x82\x45\x93\xFA\xF4\x26\x81\x89\x51\xD8\x48\x92\x7D\x6D\x06\xE7\x32\x9D\xBF\xE9\x8A\x33\x27\x8F\x0F\x81\x98\x84\x11\x28\xDD\x99\x8A\x74\x65\xF2\x1C\xB3\x4D\x23\x5E\x24\x49\xDD\xA2\x68\xAD\x09\x24\xC7\x57\x99\x9C\x0F\xEC\x1F\xF6\xB4\xA2\x32\xC2\x57\x17\x6B\x06\xD9\x5C\x87\xCD\xCA\x5C\x60\x0C\xF9\x8E\xDF\xEA\x0D\xE2\x5B\x48\xFE\x8C\x6A\x5B\x8D\x0E\x92\x45\x62\xE2\xB8\xB1\xE9\x61\x64\xE9\x96\x19\xE1\x73\x90\x6E\x12\xD5\xAB\xF4\x4C\x3B\x52\x18\x28\x12\x4B\x3B\xD9\x04\xD3\xD3\x83\x6B\xF2\x30\x77\x15\x44\x92\x40\x5A\x31\x0B\x57\x31\x0D\x32\xCC\x3A\xB0\x4F\xC4\xE5\x92\xDB\x76\xE2\x6F\x72\xB4\x2E\x64\x3C\x3A\x0F\x92\x96\xA5\x74\xEF\xFB\x8F\xEE\xB2\x4D\x24\xF9\x45\xD4\x53\x4B\x91\xD4\x7A\x2C\x25\xDD\xFC\x48\x1B\x66\x6F\xFD\x99\xC8\xF3\x11\x87\x73\x47\x8F\x4B\x81\x4C\x47\x3E\x98\xB8\x0F\x27\x1A\x2C\x8E\x77\x68\x47\x23\x32\x91\xFA\xFD\xEE\xA5\x74\x1F\xA7\xB4\x91\x1C\x2C\xDA\x4A\xE7\x5B\x3B\xE9\x73\x03\xF9\xEC\xD2\x84\xE1\x9B\x0A\x24\x88\x97\xA6\xCB\x2E\x56\x14\x29\x9A\xF4\x8F\x46\x4B\x41\x15\x33\xA2\x99\xF3\x85\x98\x47\xD7\x9A\xBC\x69\x6B\x3D\x4C\x2E\xC7\x87\x26\x63\x9B\x60\x70\x9D\xD5\x24\x12\xC9\x3D\xC4\xBB\xF8\xDA\x70\xE8\xCB\x36\x20\x8D\x57\x6D\x2E\x76\x1E\xA5\xAC\xD7\x88\xBA\xA4\xD1\x80\xBA\x15\x99\xCF\x68\x27\x79\x0C\x62\x7B\x6D\xD7\x6B\x50\x26\x63\xE6\xF5\xF2\x4E\x11\x69\x7F\xA2\x88\xCD\xA4\x56\x62\x06\xF2\x30\xF8\xB8\x71\x69\xBA\x0A\x8B\xB0\x13\x48\x96\x6B\x44\xAD\x6C\x4F\xDD\x9E\x68\x21\x5A\x34\x59\x57\x2B\x94\xE8\x6D\x6D\xD2\xD2\x44\xC7\x99\xCC\x57\x64\x25\x9A\x5F\x09\xA2\x1B\x15\x47\x51\x79\xB1\xDA\x31\x5B\x22\x39\x0B\xB3\x59\xD9\x66\x62\x22\x66\xC9\x1A\xA2\x41\x79\x9A\xEE\xCB\x3C\x3A\x1F\xD6\x2C\x71\x5B\x36\xB4\xE1\xAF\xC7\x60\x4C\x91\x6E\x5E\x93\xF0\x12\xD3\x8C\x27\xCD\x86\xEB\xFB\x11\x7D\x2E\x69\x05\x96\x86\x52\x8C\x43\x8A\x9E\x07\x31\x09\x28\x33\xCD\x99\xD5\x2C\xCC\xC3\xED\x7A\x99\x76\x3A\xBB\xB5\x26\x09\x35\x86\x22\xA5\xB1\x93\xB6\x49\x09\xE7\x32\xF1\x94\x79\xA7\x68\x81\xA8\x67\x2B\x1D\xD1\xC4\x60\xDE\x4B\x03\xDA\xD9\x54\x7C\x49\x83\xF3\xB9\x98\x8F\x1B\xE6\x91\x6C\x6F\xF0\xAD\x88\x8F\x99\x74\x53\x91\xB4\xA1\x31\x5B\xB5\x2C\x42\x44\x92\x57\x68\xC5\x74\x36\x15\x87\xC9\x2C\xB7\xED\xC4\x9C\x49\x00\x63\xD0\xF8\x0A\x35\x31\x59\x8B\x0C\x1A\xB3\xD5\x95\x68\x45\xE0\x50\xE4\xFE\xD9\xB6\x28\x1D\xC8\x43\x3B\x86\xEE\x03\xE4\xA4\x87\x35\x8D\xF3\x24\xC9\x23\x99\x65\xAD\x7B\x21\x68\x09\xB6\xF2\x13\x85\x93\xD4\x5B\xF9\x17\x65\x78\xF7\xE5\x42\x2F\x35\x2A\x10\x45\x89\x41\x0B\xE8\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xA0\x02\x51\x94\x18\x54\x20\x8A\x12\x83\x0A\x44\x51\x62\x50\x81\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xFC\x3F\x0A\x00\xEF\x12\x6A\x59\xC5\x19\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82" \ No newline at end of file