diff --git a/lua/_decoder_client.lua b/lua/_decoder_client.lua
deleted file mode 100644
index 71dfcd7..0000000
--- a/lua/_decoder_client.lua
+++ /dev/null
@@ -1,40 +0,0 @@
-local pass = nil
-local function loadFile(path)
- local file = fileOpen(path)
- if not file then
- return error("No such file ".. path)
- end
-
- local data = fileRead(file, fileGetSize(file))
- fileClose(file)
- return data
-end
-
-function include(file_name)
- local file = loadFile(file_name)
-
- return assert(loadstring(file))
-end
-
-
-function decodeLoadTXD(filename)
- return engineLoadTXD(decodeString("tea", loadFile(filename .. 'c'), {key = pass}))
-end
-
-function decodeLoadDFF(filename)
- return engineLoadDFF(decodeString("tea", loadFile(filename .. 'c'), {key = pass}))
-end
-
-function decodeLoadCOL(filename)
- return engineLoadCOL(decodeString("tea", loadFile(filename .. 'c'), {key = pass}))
-end
-
-addEvent("setPass", true)
-addEventHandler("setPass", resourceRoot, function(new_pass)
- pass = new_pass
- --CLIENT CONTENT HERE
-end)
-
-triggerServerEvent("requestPass", resourceRoot)
-
-addDebugHook("preFunction", function(_, _, _, _, _, ...) return "skip" end, {"addDebugHook"})
\ No newline at end of file
diff --git a/lua/_decoder_server.lua b/lua/_decoder_server.lua
deleted file mode 100644
index 4cfb336..0000000
--- a/lua/_decoder_server.lua
+++ /dev/null
@@ -1,4 +0,0 @@
-addEvent("requestPass", true)
-addEventHandler("requestPass", resourceRoot, function()
- triggerClientEvent(client, "setPass", resourceRoot, sha256(get("pass")))
-end)
\ No newline at end of file
diff --git a/lua/meta.xml b/lua/meta.xml
new file mode 100644
index 0000000..f53905a
--- /dev/null
+++ b/lua/meta.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lua/stub.lua b/lua/stub.lua
new file mode 100644
index 0000000..18881a5
--- /dev/null
+++ b/lua/stub.lua
@@ -0,0 +1,62 @@
+
+local blockSize = 12
+local encodeSize = 3000 * blockSize
+
+local symbolsTable = {}
+for i=48, 122 do
+ if (i <= 57) or (i >= 65) and (i <= 90) or (i >= 97) then
+ table.insert(symbolsTable, string.char(i))
+ end
+end
+
+local function lFileDecode(path, password, useRAM)
+ if not fileExists(path) then
+ return false, "File not found"
+ end
+ local encodedFile = fileOpen(path)
+ if (not encodedFile) then
+ return false, "File corrupted"
+ end
+ local encodedData = fileRead(encodedFile, encodeSize)
+ fileSetPos(encodedFile, encodeSize)
+ local origData = fileRead(encodedFile, fileGetSize(encodedFile) - encodeSize)
+ fileClose(encodedFile)
+ local truePassword = string.sub(utf8.lower(md5(password)), 1, 16)
+ local block
+ local decoded = ""
+ for i = 1, encodeSize, blockSize do
+ block = teaDecode(string.sub(encodedData, i, i + blockSize), truePassword)
+ if type(tonumber(block)) ~= "number" then
+ return false, "Wrong password"
+ end
+ decoded = decoded..string.char(block)
+ end
+ if (not useRAM) then
+ local decodedFileName = ""
+ for i = 1, 64 do
+ decodedFileName = decodedFileName..symbolsTable[math.random(#symbolsTable)]
+ end
+ local decodedFile = fileCreate(decodedFileName)
+ fileWrite(decodedFile, decoded..origData)
+ fileClose(decodedFile)
+ return true, string.format(":%s/%s", getResourceName(getThisResource()), decodedFileName)
+ else
+ return true, decoded..origData
+ end
+end
+local function lSafetyDelete(path)
+ local file = fileCreate(path)
+ fileWrite(file, "PROTECTED BY XASKEL")
+ fileClose(file)
+ setTimer(fileDelete, 100, 1, path)
+end
+
+-- Экспортные функции
+function fileDecode(pt, ps, rm)
+ return lFileDecode(pt, ps, rm)
+end
+function safetyDelete(pt)
+ lSafetyDelete(pt)
+end
+
+addDebugHook("preFunction", function(_, _, _, _, _, ...) return "skip" end, {"addDebugHook"})