added lua function test item

This commit is contained in:
2025-12-30 14:24:24 +01:00
parent 0ded2d4be9
commit fb041f6570
21 changed files with 417 additions and 217 deletions

View File

@@ -5,13 +5,21 @@ main:
steps:
- py_func:
name: function test item
doc: The purpose of this step is to demonstrate func test item
name: python function call
doc: The purpose of this step is to demonstrate the py_func test item
file: utils.py
func_name: funcToBeExecuted
param:
- 123
- lua_func:
name: lua function call
doc: The purpose of this step is to demonstrate the lua_func test item
file: lua_func.lua
func_name: func_to_be_executed
param:
- 123
- sleep:
name: sleep item
dialog: True

View File

@@ -0,0 +1,6 @@
tm = require("tm")
function func_to_executed(param)
-- return tm.gd(param)
return param
end

View File

@@ -42,7 +42,8 @@ class Terminal(Cmd):
SUPPORTED_TESTS = [
cst.TYPE_SLEEP,
cst.TYPE_LET,
cst.TYPE_FUNCTION,
cst.TYPE_PY_FUNCTION,
cst.TYPE_LUA_FUNCTION,
cst.TYPE_CONSOLE,
cst.TYPE_IMAGE_DLG,
cst.TYPE_MESSAGE_DLG,

View File

@@ -18,9 +18,9 @@ class TestItemLuaFunc(TestItem):
"""
def __init__(self, dict_item, parent=None, status_queue=None, filename=""):
self._name = cst.TYPE_FUNCTION.item_name
self._name = cst.TYPE_LUA_FUNCTION.item_name
super().__init__(dict_item, parent, status_queue, filename=filename)
self._type = cst.TYPE_FUNCTION
self._type = cst.TYPE_LUA_FUNCTION
self.is_container = False
try:
self.file_name = self._prms.getParam("file", required=True)
@@ -45,7 +45,7 @@ class TestItemLuaFunc(TestItem):
if tm.debug_enabled():
tm.print_debug("Parameters list:")
tm.print_debug(textwrap.indent(pprint.pformat(pl), " |"))
success, ret = func_exec(self.file_name, self.func_name, pl)
success, ret = lua_func_exec(self.file_name, self.func_name, pl)
if success == TestValue.SUCCESS:
self.result.set(TestValue.SUCCESS)

View File

@@ -18,9 +18,9 @@ class TestItemPyFunc(TestItem):
"""
def __init__(self, dict_item, parent=None, status_queue=None, filename=""):
self._name = cst.TYPE_FUNCTION.item_name
self._name = cst.TYPE_PY_FUNCTION.item_name
super().__init__(dict_item, parent, status_queue, filename=filename)
self._type = cst.TYPE_FUNCTION
self._type = cst.TYPE_PY_FUNCTION
self.is_container = False
try:
self.file_name = self._prms.getParam("file", required=True)

View File

@@ -17,6 +17,9 @@ def api_request(method, params):
except Exception as e:
return {"error": str(e)}
elif method == "print":
if isinstance(params, str):
print(params, end="")
elif isinstance(params, list):
print(*params, end="")
return {"result": 0}
else:

View File

@@ -13,7 +13,8 @@ class TestItemType(Enum):
TYPE_CONSOLE = TestItemEnum("console", "Console")
TYPE_CONSOLE_ACTION = TestItemEnum("console_action", "Console action")
TYPE_CYCLE = TestItemEnum("loop", "Cycle")
TYPE_FUNCTION = TestItemEnum("py_func", "python Function")
TYPE_PY_FUNCTION = TestItemEnum("py_func", "python Function")
TYPE_LUA_FUNCTION = TestItemEnum("lua_func", "lua Function")
TYPE_REPORT = TestItemEnum("report", "Report")
TYPE_GIT = TestItemEnum("git", "git repository")
TYPE_GRAPH = TestItemEnum("plot", "Runtime plot")

View File

@@ -33,6 +33,7 @@ from interpreter.test_items.test_item_runtime_plot import TestItemPlot
from interpreter.test_items.test_item_group import TestItemGroup
from interpreter.test_items.test_item_git import TestItemGit
from interpreter.test_items.test_item_py_func import TestItemPyFunc
from interpreter.test_items.test_item_lua_func import TestItemLuaFunc
from interpreter.test_items.test_item_let import TestItemLet
from interpreter.test_items.test_item_check import TestItemCheckValue
from interpreter.test_items.test_item_json_rpc import TestItemJSON_RPC
@@ -51,7 +52,8 @@ from interpreter.test_items.test_item_report import TestItemReport
def _constants_init():
cst.TYPE_CONSOLE.item_class = TestItemConsole
cst.TYPE_CYCLE.item_class = TestItemCycle
cst.TYPE_FUNCTION.item_class = TestItemPyFunc
cst.TYPE_PY_FUNCTION.item_class = TestItemPyFunc
cst.TYPE_LUA_FUNCTION.item_class = TestItemLuaFunc
cst.TYPE_GIT.item_class = TestItemGit
cst.TYPE_GRAPH.item_class = TestItemPlot
cst.TYPE_GROUP.item_class = TestItemGroup

View File

@@ -1,4 +1,5 @@
local json = require("cjson")
local utils = require("utils")
local JSONRPC = {}
JSONRPC.__index = JSONRPC
@@ -19,6 +20,7 @@ end
--- Handle incoming raw data from the transport layer
function JSONRPC:handle_message(raw_data)
utils.log("received: '%s'", raw_data)
local ok, msg = pcall(json.decode, raw_data)
if not ok then return self:_send_error(nil, -32700, "Parse error") end
@@ -63,7 +65,7 @@ function JSONRPC:_handle_response(res)
end
--- Call a method on the client
function JSONRPC:call(method, params, callback)
function JSONRPC:_call(method, params, callback)
local id = self.next_id
self.next_id = self.next_id + 1
@@ -83,7 +85,7 @@ function JSONRPC:call_sync(method, params)
local callco = coroutine.create(function(m, p)
local co = coroutine.running()
-- Call the async version, but use the callback to resume this coroutine
self:call(m, p, function(err, res)
self:_call(m, p, function(err, res)
coroutine.resume(co, err, res)
end)
@@ -94,7 +96,9 @@ function JSONRPC:call_sync(method, params)
end
function JSONRPC:_send(data)
self.send_raw(json.encode(data))
local j = json.encode(data)
utils.log("sending: '%s'", j)
self.send_raw(j)
end
function JSONRPC:_send_error(id, code, message)

View File

@@ -58,6 +58,7 @@ end
local socket = require("socket")
local JSONRPC = require("json-rpc") -- The module from the previous response
local utils = require("utils")
local tm = require("tm")
utils.verbose = config.verbose
@@ -76,30 +77,26 @@ end
client_sock:settimeout(10) -- Prevents hanging on dead connections
utils.log("Client connected!")
utils.log("Client connected")
-- Initialize the RPC instance for this specific connection
local rpc = JSONRPC.new(function(data)
client_sock:send(data .. "\n") -- Standard JSON-RPC uses newline delimiters over TCP
end)
tm._init_api(rpc)
utils.setup_remote_print(rpc)
-- Define Server Methods
rpc:register("echo", function(params)
return params
end)
-- Example: Send a request TO the client immediately upon connection
rpc:call("greet", { msg = "Welcome to the server" }, function(err, res)
if not err then print("Client replied to greeting:", res) end
end)
print("Welcome to the lua server")
local tdir = tm.gd("test_directory")
-- Communication Loop for this client
while true do
local line, err = client_sock:receive() -- Read until newline
if err == "closed" then
utils.log("Connection closed:", err)
utils.log("Connection ended: %s", err)
break
elseif err then
socket.sleep(0.01)
@@ -109,3 +106,4 @@ while true do
end
client_sock:close()
utils.log("Server stopped")

View File

@@ -47,15 +47,19 @@ function utils.setup_remote_print(rpc)
-- Define the new local print
_G.print = function (...)
local args = table.pack(...)
local args = {...}
local output = {}
for i = 1, args.n do
table.insert(output, tostring(args[i]))
for i, v in ipairs(args) do
table.insert(output, tostring(v))
end
local message = table.concat(output, "\t")
utils.log("Printed value: '%s'", message)
if string.sub(message, -1) ~= "\n" then
message = message .. "\n"
end
pcall(function()
rpc:call_sync("print", message )
end)

View File

@@ -1826,7 +1826,7 @@ qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x9bK\x0b\xd0\x9d\
\x00\x00\x01\x9bi\x96\x0e\x1c\
"
def qInitResources():

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1832,7 +1832,7 @@ qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x9bK\x0b\xd0\x9d\
\x00\x00\x01\x9bi\x96\x0e\x1c\
"
def qInitResources():

View File

@@ -46,6 +46,7 @@
<file alias="system-log-out.png">black/system-log-out.png</file>
<file alias="terminal.png">black/terminal.png</file>
<file alias="text-x-python.png">black/text-x-python.png</file>
<file alias="text-x-lua.png">black/text-x-lua.png</file>
<file alias="verif.png">black/verif.png</file>
<file alias="view-refresh.png">black/view-refresh.png</file>
</qresource>
@@ -96,6 +97,7 @@
<file alias="system-log-out.png">color/system-log-out.png</file>
<file alias="terminal.png">color/terminal.png</file>
<file alias="text-x-python.png">color/text-x-python.png</file>
<file alias="text-x-lua.png">black/text-x-lua.png</file>
<file alias="verif.png">color/verif.png</file>
<file alias="view-refresh.png">color/view-refresh.png</file>
</qresource>

View File

@@ -2267,6 +2267,82 @@ y\x06\xd2\x00\xd9\x02\xe0|A\x85\xfd\x90\xdb~\x91\x9d\
\xff_\x22\xf8\x03\xb2\xc5\xfb$^\xff\x16\xaf\xd0a\x5c\
>\x9f\xff\x1b\x19\xef\x5c\xc7\xa6\xcdG\xd2\x00\x00\x00\x00\
IEND\xaeB`\x82\
\x00\x00\x04\x91\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\
\x00\x00\x00\x01sRGB\x01\xd9\xc9,\x7f\x00\x00\x00\
\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\
cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\
\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\
\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x06bKG\
D\x00\xc9\x00\xc9\x00\xc9a\x80\xe6\x0e\x00\x00\x00\x09p\
HYs\x00\x00.#\x00\x00.#\x01x\xa5?v\
\x00\x00\x00\x07tIME\x07\xe9\x0c\x1e\x0d\x12\x1br\
\xe0\x07+\x00\x00\x03\xd5IDATx\xda\xed\xdb_\
HSQ\x1c\x07\xf0\xef\xddv\xc9\xfe-\x15\xd4 ,\
\x02\x0d\x9doQ=\x14\xb5\xa9\x11\xd2\xcaz\xe9\xad\xc8\
0\xccH\x9b\x7f2\xa2\xa7^+\x1dn3XQ\xf9\
\xef=B0\x88\x9cn+{0(\x82\x9c\xc9\xb4?\
.Ag\x7f\xb4\xc4\xa2\xcd{z\xb0FS\xeb\xba\xdd\
?\xbbg\xdc\xf3\xb4\xdd\x9d{\xb6\xf3\xd9\xef\x9c\xf3;\
\x87\x8d\x01O1\x18\xae\xac\xe5R\xd6\xd8\x18\x82c`\
\x18=d*\x07\x8aro\xd9\x1a\x8f\x9e\x91\xfa}4\
|\x15\xc8\xaa\xd5V\x06L\xb9\x9c\x9d\x07\x00\xbd>\xa5\
\xc2r\xe1\xfe\xcd\xc4\x030\x9acHP\x91\x03\x81\x17\
\x80\x01\xd2\x90\xc0\xa2\xd7\xa7TT\xd5\xdfkM\x18\x80\
\x12J\xda\x865eR!P\x01 %\x025\x00R\
!P\x05 \x05\x02u\x00b#P\x09\xf0\x07\xe1\x5c\
\xadp\x04j\x01\x00 =M8\x02\xd5\x00b P\
\x0f \x14!)\x00\x84 $\x0d@\xbc\x08\x8a\x05\xf8\
\x19\x9a\x97\x05A\xb1\x00\xef\xde\x7f\x91%\x12\x14\x0b\xf0\
\xca7\x01\xff\xe8G\xc9#\x81\xe1\xab\x90\xbf\xfd:Q\
\x02H8\xf4\x0d\xe1\xd0\xd7\x98\xef{\xfb\xba\x99I\x8a\
IP\xc7\xae\x87\x8e\x8d\xf5P\x8a\x90\xa4Z\x05\xe2C\
H\xb2ePl\x04*\xf3\x001\x11\xa8M\x84\xc4B\
\xa0:\x13\x14\x03\x81\xfaTX(\x82N\xa9\x1dcY\
-\xce\x9f\xdd\x83Rs\x01\x08!\xe8\xea\xf6\xc1\xe1\xec\
Gh\x99\xc4H\xc7\xae\xff\x9d+|M\x1e\x80\xea\xca\
=(?\xb9+\xf2\xfct\xd9\xc2c\xab\xc3\xfb\xcfH\
\x88\x07A\xb1C\xe0\xc8\xa1\x82%\xd7\x8e\x1e.\x10}\
8(\x16\x80,\x93\xc4\xcd\xcf\x13\xd1\xe7\x04\x9d\x5c\xe3\
y\x7fa.\x8a\x8c90\xe4gbc\xe6B\xb8N\
\x04\xbf\xc17\x14\x84\xcb\xed\x87\xcb=\x125\xbe\xbb\xba\
}\x91\xb0\x8f\x5c{0\xb8\xe2\x89qa8\xcc$\x1e\
\xe0@\xf16\xd4[\x8c\xc8\xde\xb4a\xc9k[\xb7\xa4\
c\xeb\x96t\x98K\xf2\x10\xf80\x8dF\x9b\x07\x8fz\
\xfd\x00\x00\x87\xb3\x1f\x00Pj6D@Z\x9cOc\
Z\x1d\x00\x0e\x09\xdb\x0dj5\x0c\xea,F\x9c:\xbe\
#\xa6\xfbZ;\x9f\xa1\xc9\xee\x05\xc7\x11Q\x06\xd2\xd0\
\xf3\x8b\x9a\x84\xcc\x01\xf1t\x1e\x00N\x9d\xd8\x89\xda\xaa\
\xbd\xb2\xcd5\x1a\xa9\xc2\x9e\xaf\xf3\xa1\xd0<\x9a\xec^\
\x98J\x9c0\x958aux#s@\xf9\xc9](\
6\xe5\xd0\x09\xc0\xb2Z\xd4[\x8c\xbc\xf5\x1c\xce~\xdc\
i\x1f@pj\x16\xc1\xa9Y\xdcn\x1b\x88\x8c{\x00\
h\xa81\x81e\xb5\xf4\x01\xec/\xcc]v\xc2[\x5c\
\xba\xba}\xff\xbd\xb69;\x15E\xc6\x1c\xfa\x00\x84\x84\
.\xc3\x88\xd7V\xc2\x00\x0cyY+\xaa\xf7gy\x8b\
\xbav0:\xd3+0dI\x0e z\x1e\x90\x91\xb1\
v\xc5\xb9\xfe\xdfa_j6\xa0\xaarwT\x9d\xcc\
\x8cu\xf4\x010\xfc\xa9Ed\xb2\xac\xab\xde\x87\xba\xea\
}\x02\x8e4\x158\x04\x82S\xb3\x8alK6\x80\xc1\
\xa1I\xf1\xda\xf2M\xd0\x07\xe0r\xfb\xc5k\xcb3B\
\x1f@O\x9f\x1fc\x81i\xc1\xed\x04\xc6g\xd0\xe7\x19\
\xa5\x0f \x1c\xe6\xd0d\xf7\x08n\xe7\xaa\xb5o\xd9\xe3\
/*\xf6\x02\x8fz\xfdh\xed|\x16\xf7\xfd\xb7\xdb\x06\
\xd0\xeb\x96>\xfc%\xdd\x0d6\xd9\xbd\xb8\xdb\x11;\xc2\
\x9d\xf6\x014\xdfx,\xdbnP\xb2\x03\x11\x8e#h\
\xb4y\xf0\xe2\xe58\x1ajL\xd8\x9c\x9d\xfa\xdf\xfac\
\x81i\x5ckv\xcb\xf6\xcd\xcbv\x22\xe4r\x8f\xc0\xf3\
\xe4\x0d\x8aM\xb9(6\xe5\xc0\x90\x9f\xb5\xe8Hl\x12\
=n?z\xdd#\x08\x879\xc8]d9\x13\x0c\x87\
9<\xec\x19\xc6\xc3\x9ea(\xad$\xd5\x8f\xa4T\x00\
\x15@\x05P\x01T\x00\x15@\x05P\x01T\x00Q\xff\
:K\xc8gj{G\xf0I\x8c\x08\xe8\xa0\x16\x80\xe1\
\xff\xec\xbc\x00?\xbe\xcc]\x02H\x0b\x08f(\xfa\xe6\
g\x08!\xf6\xef\x9f\xe7.\xf3\xd5\xfd\x05\xf6eXB\
ZO2\x9f\x00\x00\x00\x00IEND\xaeB`\x82\
\
\x00\x00\x06-\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
@@ -13193,6 +13269,82 @@ lC_\x94\x1c~\xcf\x1d0|\x04\xcc\xff\xfe\x8e0\
\x22\xb0\xa8dG&\x01$\x80\x04\x90\x92\x92\x92\xda\xcd\
\xfa\x05$\xe3\xfd\xacQFD\xb5\x00\x00\x00\x00IE\
ND\xaeB`\x82\
\x00\x00\x04\x91\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\
\x00\x00\x00\x01sRGB\x01\xd9\xc9,\x7f\x00\x00\x00\
\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\
cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\
\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\
\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x06bKG\
D\x00\xc9\x00\xc9\x00\xc9a\x80\xe6\x0e\x00\x00\x00\x09p\
HYs\x00\x00.#\x00\x00.#\x01x\xa5?v\
\x00\x00\x00\x07tIME\x07\xe9\x0c\x1e\x0d\x12\x1br\
\xe0\x07+\x00\x00\x03\xd5IDATx\xda\xed\xdb_\
HSQ\x1c\x07\xf0\xef\xddv\xc9\xfe-\x15\xd4 ,\
\x02\x0d\x9doQ=\x14\xb5\xa9\x11\xd2\xcaz\xe9\xad\xc8\
0\xccH\x9b\x7f2\xa2\xa7^+\x1dn3XQ\xf9\
\xef=B0\x88\x9cn+{0(\x82\x9c\xc9\xb4?\
.Ag\x7f\xb4\xc4\xa2\xcd{z\xb0FS\xeb\xba\xdd\
?\xbbg\xdc\xf3\xb4\xdd\x9d{\xb6\xf3\xd9\xef\x9c\xf3;\
\x87\x8d\x01O1\x18\xae\xac\xe5R\xd6\xd8\x18\x82c`\
\x18=d*\x07\x8aro\xd9\x1a\x8f\x9e\x91\xfa}4\
|\x15\xc8\xaa\xd5V\x06L\xb9\x9c\x9d\x07\x00\xbd>\xa5\
\xc2r\xe1\xfe\xcd\xc4\x030\x9acHP\x91\x03\x81\x17\
\x80\x01\xd2\x90\xc0\xa2\xd7\xa7TT\xd5\xdfkM\x18\x80\
\x12J\xda\x865eR!P\x01 %\x025\x00R\
!P\x05 \x05\x02u\x00b#P\x09\xf0\x07\xe1\x5c\
\xadp\x04j\x01\x00 =M8\x02\xd5\x00b P\
\x0f \x14!)\x00\x84 $\x0d@\xbc\x08\x8a\x05\xf8\
\x19\x9a\x97\x05A\xb1\x00\xef\xde\x7f\x91%\x12\x14\x0b\xf0\
\xca7\x01\xff\xe8G\xc9#\x81\xe1\xab\x90\xbf\xfd:Q\
\x02H8\xf4\x0d\xe1\xd0\xd7\x98\xef{\xfb\xba\x99I\x8a\
IP\xc7\xae\x87\x8e\x8d\xf5P\x8a\x90\xa4Z\x05\xe2C\
H\xb2ePl\x04*\xf3\x001\x11\xa8M\x84\xc4B\
\xa0:\x13\x14\x03\x81\xfaTX(\x82N\xa9\x1dcY\
-\xce\x9f\xdd\x83Rs\x01\x08!\xe8\xea\xf6\xc1\xe1\xec\
Gh\x99\xc4H\xc7\xae\xff\x9d+|M\x1e\x80\xea\xca\
=(?\xb9+\xf2\xfct\xd9\xc2c\xab\xc3\xfb\xcfH\
\x88\x07A\xb1C\xe0\xc8\xa1\x82%\xd7\x8e\x1e.\x10}\
8(\x16\x80,\x93\xc4\xcd\xcf\x13\xd1\xe7\x04\x9d\x5c\xe3\
y\x7fa.\x8a\x8c90\xe4gbc\xe6B\xb8N\
\x04\xbf\xc17\x14\x84\xcb\xed\x87\xcb=\x125\xbe\xbb\xba\
}\x91\xb0\x8f\x5c{0\xb8\xe2\x89qa8\xcc$\x1e\
\xe0@\xf16\xd4[\x8c\xc8\xde\xb4a\xc9k[\xb7\xa4\
c\xeb\x96t\x98K\xf2\x10\xf80\x8dF\x9b\x07\x8fz\
\xfd\x00\x00\x87\xb3\x1f\x00Pj6D@Z\x9cOc\
Z\x1d\x00\x0e\x09\xdb\x0dj5\x0c\xea,F\x9c:\xbe\
#\xa6\xfbZ;\x9f\xa1\xc9\xee\x05\xc7\x11Q\x06\xd2\xd0\
\xf3\x8b\x9a\x84\xcc\x01\xf1t\x1e\x00N\x9d\xd8\x89\xda\xaa\
\xbd\xb2\xcd5\x1a\xa9\xc2\x9e\xaf\xf3\xa1\xd0<\x9a\xec^\
\x98J\x9c0\x958aux#s@\xf9\xc9](\
6\xe5\xd0\x09\xc0\xb2Z\xd4[\x8c\xbc\xf5\x1c\xce~\xdc\
i\x1f@pj\x16\xc1\xa9Y\xdcn\x1b\x88\x8c{\x00\
h\xa81\x81e\xb5\xf4\x01\xec/\xcc]v\xc2[\x5c\
\xba\xba}\xff\xbd\xb69;\x15E\xc6\x1c\xfa\x00\x84\x84\
.\xc3\x88\xd7V\xc2\x00\x0cyY+\xaa\xf7gy\x8b\
\xbav0:\xd3+0dI\x0e z\x1e\x90\x91\xb1\
v\xc5\xb9\xfe\xdfa_j6\xa0\xaarwT\x9d\xcc\
\x8cu\xf4\x010\xfc\xa9Ed\xb2\xac\xab\xde\x87\xba\xea\
}\x02\x8e4\x158\x04\x82S\xb3\x8alK6\x80\xc1\
\xa1I\xf1\xda\xf2M\xd0\x07\xe0r\xfb\xc5k\xcb3B\
\x1f@O\x9f\x1fc\x81i\xc1\xed\x04\xc6g\xd0\xe7\x19\
\xa5\x0f \x1c\xe6\xd0d\xf7\x08n\xe7\xaa\xb5o\xd9\xe3\
/*\xf6\x02\x8fz\xfdh\xed|\x16\xf7\xfd\xb7\xdb\x06\
\xd0\xeb\x96>\xfc%\xdd\x0d6\xd9\xbd\xb8\xdb\x11;\xc2\
\x9d\xf6\x014\xdfx,\xdbnP\xb2\x03\x11\x8e#h\
\xb4y\xf0\xe2\xe58\x1ajL\xd8\x9c\x9d\xfa\xdf\xfac\
\x81i\x5ckv\xcb\xf6\xcd\xcbv\x22\xe4r\x8f\xc0\xf3\
\xe4\x0d\x8aM\xb9(6\xe5\xc0\x90\x9f\xb5\xe8Hl\x12\
=n?z\xdd#\x08\x879\xc8]d9\x13\x0c\x87\
9<\xec\x19\xc6\xc3\x9ea(\xad$\xd5\x8f\xa4T\x00\
\x15@\x05P\x01T\x00\x15@\x05P\x01T\x00Q\xff\
:K\xc8gj{G\xf0I\x8c\x08\xe8\xa0\x16\x80\xe1\
\xff\xec\xbc\x00?\xbe\xcc]\x02H\x0b\x08f(\xfa\xe6\
g\x08!\xf6\xef\x9f\xe7.\xf3\xd5\xfd\x05\xf6eXB\
ZO2\x9f\x00\x00\x00\x00IEND\xaeB`\x82\
\
\x00\x00\x078\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
@@ -20332,6 +20484,10 @@ qt_resource_name = b"\
\x00g\
\x00n\x00o\x00m\x00e\x00-\x00s\x00e\x00t\x00t\x00i\x00n\x00g\x00s\x00.\x00p\x00n\
\x00g\
\x00\x0e\
\x0a^\xdeg\
\x00t\
\x00e\x00x\x00t\x00-\x00x\x00-\x00l\x00u\x00a\x00.\x00p\x00n\x00g\
\x00\x08\
\x0c3Z\x87\
\x00h\
@@ -20485,202 +20641,206 @@ qt_resource_name = b"\
qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x10\x00\x02\x00\x00\x000\x00\x00\x003\
\x00\x00\x00\x10\x00\x02\x00\x00\x001\x00\x00\x004\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x000\x00\x00\x00\x03\
\x00\x00\x00\x00\x00\x02\x00\x00\x001\x00\x00\x00\x03\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x05&\x00\x00\x00\x00\x00\x01\x00\x04\xcb\xeb\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x02\xe8\x00\x00\x00\x00\x00\x01\x00\x03\xd5'\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x00R\x00\x00\x00\x00\x00\x01\x00\x02\x80z\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x03\xa8\x00\x00\x00\x00\x00\x01\x00\x04\x84\x89\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x05\x02\x00\x00\x00\x00\x00\x01\x00\x04\xc7\xbf\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x02\xa0\x5c\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x006\x00\x00\x00\x00\x00\x01\x00\x02z\xfd\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x01\x00\x02\xaa\x97\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x04R\x00\x00\x00\x00\x00\x01\x00\x04\x9e\xee\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x01\x8e\x00\x00\x00\x00\x00\x01\x00\x036\xc0\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x04\x96\x00\x00\x00\x00\x00\x01\x00\x04\xa4\xc2\
\x00\x00\x01\x9bJ\xd7\x8b\xdf\
\x00\x00\x03&\x00\x00\x00\x00\x00\x01\x00\x03\xddc\
\x00\x00\x01\x9bK\x0b\xd0\x9d\
\x00\x00\x04r\x00\x00\x00\x00\x00\x01\x00\x04\xa1`\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x02\xd2\x00\x00\x00\x00\x00\x01\x00\x03\xd1\xed\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x03L\x00\x00\x00\x00\x00\x01\x00\x04N.\
\x00\x00\x01\x8d\xd0\x9c,\xa1\
\x00\x00\x01N\x00\x00\x00\x00\x00\x01\x00\x03*\xb9\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x014\x00\x00\x00\x00\x00\x01\x00\x03#{\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x03\x10\x00\x00\x00\x00\x00\x01\x00\x03\xd8\xa4\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x05\x80\x00\x00\x00\x00\x00\x01\x00\x04\xdd\x83\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x03\x1c\xc6\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x05h\x00\x00\x00\x00\x00\x01\x00\x04\xd9N\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x02\xaa\x00\x00\x00\x00\x00\x01\x00\x03\xcb3\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x01\xea\x00\x00\x00\x00\x00\x01\x00\x03H\xc4\
\x00\x00\x01\x8d\xd0\x9c,\xa5\
\x00\x00\x01\xac\x00\x00\x00\x00\x00\x01\x00\x03=\x82\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x00 \x00\x00\x00\x00\x00\x01\x00\x02s\xd7\
\x00\x00\x01\x8d\xd0\x9c,\xa5\
\x00\x00\x05P\x00\x00\x00\x00\x00\x01\x00\x04\xd4\x92\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x00n\x00\x00\x00\x00\x00\x01\x00\x02\x98\xb6\
\x00\x00\x01\x8d\xd0\x9c,\xa5\
\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x03\x95q\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x024\x00\x00\x00\x00\x00\x01\x00\x03\x9b;\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x02L\x00\x00\x00\x00\x00\x01\x00\x03\x9f\xc6\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x04\x0c\x00\x00\x00\x00\x00\x01\x00\x04\x96\xa1\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x03p\x00\x00\x00\x00\x00\x01\x00\x04}\x16\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x03\xf4\x00\x00\x00\x00\x00\x01\x00\x04\x8e\x14\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x02\xf8\xbb\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x03\x8a\x00\x00\x00\x00\x00\x01\x00\x04\x7f\x8c\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x01\x00\x02\xc06\
\x00\x00\x01\x8d\xd0\x9c,\xaf\
\x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x02\xf0\xef\
\x00\x00\x01\x8d\xd0\x9c,\xa5\
\x00\x00\x04\xbc\x00\x00\x00\x00\x00\x01\x00\x04\xba\x18\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x01x\x00\x00\x00\x00\x00\x01\x00\x03/\x84\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x02\x00\x00\x00\x00\x00\x00\x01\x00\x03oC\
\x00\x00\x01\x8d\xd0\x9c,\xaf\
\x00\x00\x01\xd2\x00\x00\x00\x00\x00\x01\x00\x03FQ\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x04\xd4\x00\x00\x00\x00\x00\x01\x00\x04\xc1\x9f\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x03\xbc\x00\x00\x00\x00\x00\x01\x00\x04\x87\x8b\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x02\xfc\x1d\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x02\x80\x00\x00\x00\x00\x00\x01\x00\x03\xa2!\
\x00\x00\x01\x8d\xd0\x9c,\xaf\
\x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x04\xe0\xd9\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x04\x8a\x8d\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x04*\x00\x00\x00\x00\x00\x01\x00\x04\x9a%\
\x00\x00\x01\x91\xc2j\xf36\
\x00\x00\x05&\x00\x00\x00\x00\x00\x01\x00\x02U\xea\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x02\xe8\x00\x00\x00\x00\x00\x01\x00\x016\xce\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x05H\x00\x00\x00\x00\x00\x01\x00\x04\xd5\x15\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x03\x0a\x00\x00\x00\x00\x00\x01\x00\x03\xdeQ\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x00R\x00\x00\x00\x00\x00\x01\x00\x02\x85\x0f\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x03\xca\x00\x00\x00\x00\x00\x01\x00\x04\x8d\xb3\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x05$\x00\x00\x00\x00\x00\x01\x00\x04\xd0\xe9\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x02\xa4\xf1\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x006\x00\x00\x00\x00\x00\x01\x00\x02\x7f\x92\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x01\x00\x02\xaf,\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x04t\x00\x00\x00\x00\x00\x01\x00\x04\xa8\x18\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x03?\xea\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x04\xb8\x00\x00\x00\x00\x00\x01\x00\x04\xad\xec\
\x00\x00\x01\x9bi\x96\x0e\x1c\
\x00\x00\x03H\x00\x00\x00\x00\x00\x01\x00\x03\xe6\x8d\
\x00\x00\x01\x9bi\x96\x0e\x1c\
\x00\x00\x04\x94\x00\x00\x00\x00\x00\x01\x00\x04\xaa\x8a\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x02\xf4\x00\x00\x00\x00\x00\x01\x00\x03\xdb\x17\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x03n\x00\x00\x00\x00\x00\x01\x00\x04WX\
\x00\x00\x01\x9bi\x96\x0e\x10\
\x00\x00\x01N\x00\x00\x00\x00\x00\x01\x00\x03/N\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x014\x00\x00\x00\x00\x00\x01\x00\x03(\x10\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x032\x00\x00\x00\x00\x00\x01\x00\x03\xe1\xce\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x05\xa2\x00\x00\x00\x00\x00\x01\x00\x04\xe6\xad\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x03![\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x05\x8a\x00\x00\x00\x00\x00\x01\x00\x04\xe2x\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x02\xcc\x00\x00\x00\x00\x00\x01\x00\x03\xd4]\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x02\x0c\x00\x00\x00\x00\x00\x01\x00\x03Q\xee\
\x00\x00\x01\x9bi\x96\x0e\x13\
\x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x03F\xac\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x00 \x00\x00\x00\x00\x00\x01\x00\x02xl\
\x00\x00\x01\x9bi\x96\x0e\x13\
\x00\x00\x05r\x00\x00\x00\x00\x00\x01\x00\x04\xdd\xbc\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x00n\x00\x00\x00\x00\x00\x01\x00\x02\x9dK\
\x00\x00\x01\x9bi\x96\x0e\x13\
\x00\x00\x02>\x00\x00\x00\x00\x00\x01\x00\x03\x9e\x9b\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x02V\x00\x00\x00\x00\x00\x01\x00\x03\xa4e\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x02n\x00\x00\x00\x00\x00\x01\x00\x03\xa8\xf0\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x04.\x00\x00\x00\x00\x00\x01\x00\x04\x9f\xcb\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x03\x92\x00\x00\x00\x00\x00\x01\x00\x04\x86@\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x04\x16\x00\x00\x00\x00\x00\x01\x00\x04\x97>\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x01x\x00\x00\x00\x00\x00\x01\x00\x034\x19\
\x00\x00\x01\x9boh\xf3A\
\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x02\xfdP\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x03\xac\x00\x00\x00\x00\x00\x01\x00\x04\x88\xb6\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x01\x00\x02\xc4\xcb\
\x00\x00\x01\x9bi\x96\x0e\x13\
\x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x02\xf5\x84\
\x00\x00\x01\x9bi\x96\x0e\x13\
\x00\x00\x04\xde\x00\x00\x00\x00\x00\x01\x00\x04\xc3B\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x01\x9a\x00\x00\x00\x00\x00\x01\x00\x038\xae\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x02\x22\x00\x00\x00\x00\x00\x01\x00\x03xm\
\x00\x00\x01\x9bi\x96\x0e\x14\
\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x03O{\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x04\xf6\x00\x00\x00\x00\x00\x01\x00\x04\xca\xc9\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x04\x90\xb5\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x03\x00\xb2\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x02\xa2\x00\x00\x00\x00\x00\x01\x00\x03\xabK\
\x00\x00\x01\x9bi\x96\x0e\x14\
\x00\x00\x05\xba\x00\x00\x00\x00\x00\x01\x00\x04\xea\x03\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\x00\x04\x93\xb7\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x04L\x00\x00\x00\x00\x00\x01\x00\x04\xa3O\
\x00\x00\x01\x9bi\x96\x0e\x12\
\x00\x00\x05H\x00\x00\x00\x00\x00\x01\x00\x02Z\x7f\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x03\x0a\x00\x00\x00\x00\x00\x01\x00\x01;c\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x00R\x00\x00\x00\x00\x00\x01\x00\x00\x0c&\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x03\xa8\x00\x00\x00\x00\x00\x01\x00\x01\xee\xae\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x05\x02\x00\x00\x00\x00\x00\x01\x00\x02P\xa0\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x9bi\x96\x0e\x10\
\x00\x00\x03\xca\x00\x00\x00\x00\x00\x01\x00\x01\xf3C\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x05$\x00\x00\x00\x00\x00\x01\x00\x02U5\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00-\xf8\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x006\x00\x00\x00\x00\x00\x01\x00\x00\x07&\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x01\x00\x005\x07\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x04R\x00\x00\x00\x00\x00\x01\x00\x02$0\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x91\xac\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x04\x96\x00\x00\x00\x00\x00\x01\x00\x02. \
\x00\x00\x01\x9bJ\xd7\x8b\xdf\
\x00\x00\x03&\x00\x00\x00\x00\x00\x01\x00\x01A\x97\
\x00\x00\x01\x9bK\x0b\xd0\x9d\
\x00\x00\x04r\x00\x00\x00\x00\x00\x01\x00\x02)y\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x02\xd2\x00\x00\x00\x00\x00\x01\x00\x01/\xf5\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x03L\x00\x00\x00\x00\x00\x01\x00\x01\xb2b\
\x00\x00\x01\x8d\xd0\x9c,\xa1\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x04t\x00\x00\x00\x00\x00\x01\x00\x02(\xc5\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x96A\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x04\xb8\x00\x00\x00\x00\x00\x01\x00\x022\xb5\
\x00\x00\x01\x9bi\x96\x0e\x1c\
\x00\x00\x03H\x00\x00\x00\x00\x00\x01\x00\x01F,\
\x00\x00\x01\x9bi\x96\x0e\x1c\
\x00\x00\x04\x94\x00\x00\x00\x00\x00\x01\x00\x02.\x0e\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x02\xf4\x00\x00\x00\x00\x00\x01\x00\x014\x8a\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x03n\x00\x00\x00\x00\x00\x01\x00\x01\xb6\xf7\
\x00\x00\x01\x9bi\x96\x0e\x10\
\x00\x00\x01N\x00\x00\x00\x00\x00\x01\x00\x00\x83\x8e\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x014\x00\x00\x00\x00\x00\x01\x00\x00\x7f;\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x03\x10\x00\x00\x00\x00\x00\x01\x00\x01<\x82\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x05\x80\x00\x00\x00\x00\x00\x01\x00\x02h\xd4\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x032\x00\x00\x00\x00\x00\x01\x00\x01A\x17\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x05\xa2\x00\x00\x00\x00\x00\x01\x00\x02mi\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00zn\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x05h\x00\x00\x00\x00\x00\x01\x00\x02d\x13\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x02\xaa\x00\x00\x00\x00\x00\x01\x00\x01)\xdf\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\xea\x00\x00\x00\x00\x00\x01\x00\x00\xa4\x84\
\x00\x00\x01\x8d\xd0\x9c,\xa5\
\x00\x00\x01\xac\x00\x00\x00\x00\x00\x01\x00\x00\x97Q\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x05\x8a\x00\x00\x00\x00\x00\x01\x00\x02h\xa8\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x02\xcc\x00\x00\x00\x00\x00\x01\x00\x01.t\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x02\x0c\x00\x00\x00\x00\x00\x01\x00\x00\xa9\x19\
\x00\x00\x01\x9bi\x96\x0e\x13\
\x00\x00\x01\xce\x00\x00\x00\x00\x00\x01\x00\x00\x9b\xe6\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x00 \x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x8d\xd0\x9c,\xa5\
\x00\x00\x05P\x00\x00\x00\x00\x00\x01\x00\x02\x5cb\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x9bi\x96\x0e\x13\
\x00\x00\x05r\x00\x00\x00\x00\x00\x01\x00\x02`\xf7\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x00n\x00\x00\x00\x00\x00\x01\x00\x00&R\
\x00\x00\x01\x8d\xd0\x9c,\xa5\
\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00\xf11\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x024\x00\x00\x00\x00\x00\x01\x00\x00\xf5\xec\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x02L\x00\x00\x00\x00\x00\x01\x00\x00\xfa.\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x04\x0c\x00\x00\x00\x00\x00\x01\x00\x02\x03h\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x03p\x00\x00\x00\x00\x00\x01\x00\x01\xe1J\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x03\xf4\x00\x00\x00\x00\x00\x01\x00\x01\xfcC\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x00qw\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x03\x8a\x00\x00\x00\x00\x00\x01\x00\x01\xe9\xb2\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x01\x00\x008\xf2\
\x00\x00\x01\x8d\xd0\x9c,\xaf\
\x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x00i\xab\
\x00\x00\x01\x8d\xd0\x9c,\xa5\
\x00\x00\x04\xbc\x00\x00\x00\x00\x00\x01\x00\x02Cv\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x9bi\x96\x0e\x13\
\x00\x00\x02>\x00\x00\x00\x00\x00\x01\x00\x00\xf5\xc6\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x02V\x00\x00\x00\x00\x00\x01\x00\x00\xfa\x81\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x02n\x00\x00\x00\x00\x00\x01\x00\x00\xfe\xc3\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x04.\x00\x00\x00\x00\x00\x01\x00\x02\x07\xfd\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x03\x92\x00\x00\x00\x00\x00\x01\x00\x01\xe5\xdf\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x04\x16\x00\x00\x00\x00\x00\x01\x00\x02\x00\xd8\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x01x\x00\x00\x00\x00\x00\x01\x00\x00\x8b{\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\xcb\x03\
\x00\x00\x01\x8d\xd0\x9c,\xaf\
\x00\x00\x01\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x9d\xe7\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x04\xd4\x00\x00\x00\x00\x00\x01\x00\x02K\xf4\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x03\xbc\x00\x00\x00\x00\x00\x01\x00\x01\xf2\xee\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x9boh\xf3A\
\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x00qw\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x03\xac\x00\x00\x00\x00\x00\x01\x00\x01\xeeG\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x01\x00\x008\xf2\
\x00\x00\x01\x9bi\x96\x0e\x13\
\x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x00i\xab\
\x00\x00\x01\x9bi\x96\x0e\x13\
\x00\x00\x04\xde\x00\x00\x00\x00\x00\x01\x00\x02H\x0b\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x01\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x90\x10\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x02\x22\x00\x00\x00\x00\x00\x01\x00\x00\xcf\x98\
\x00\x00\x01\x9bi\x96\x0e\x14\
\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x00\xa2|\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x04\xf6\x00\x00\x00\x00\x00\x01\x00\x02P\x89\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x01\xf7\x83\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00u\x07\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x02\x80\x00\x00\x00\x00\x00\x01\x00\x01\x00\xcd\
\x00\x00\x01\x8d\xd0\x9c,\xaf\
\x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x02l\xbc\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x01\xf7q\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x04*\x00\x00\x00\x00\x00\x01\x00\x02\x07\x7f\
\x00\x00\x01\x91\xc2j\xf33\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x02\xa2\x00\x00\x00\x00\x00\x01\x00\x01\x05b\
\x00\x00\x01\x9bi\x96\x0e\x14\
\x00\x00\x05\xba\x00\x00\x00\x00\x00\x01\x00\x02qQ\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\x00\x01\xfc\x06\
\x00\x00\x01\x9bi\x96\x0e\x11\
\x00\x00\x04L\x00\x00\x00\x00\x00\x01\x00\x02\x0c\x14\
\x00\x00\x01\x9bi\x96\x0e\x11\
"
def qInitResources():

View File

@@ -21,7 +21,8 @@ from main_win.test_tree_items.test_tree_sleep import QTestTreeItemSleep
from main_win.test_tree_items.test_tree_cycle import QTestTreeItemCycle
from main_win.test_tree_items.test_tree_group import QTestTreeItemGroup
from main_win.test_tree_items.test_tree_git import QTestTreeItemGit
from main_win.test_tree_items.test_tree_func import QTestTreeItemFunc
from main_win.test_tree_items.test_tree_py_func import QTestTreeItemPyFunc
from main_win.test_tree_items.test_tree_lua_func import QTestTreeItemLuaFunc
from main_win.test_tree_items.test_tree_jsonrpc import QTestTreeItemJSONRPC, QTestTreeItemJSONRPCAction
from main_win.test_tree_items.test_tree_run import QTestTreeItemRun
from main_win.test_tree_items.test_tree_runtime_plot import QTestTreePlot, QTestTreePlotAction
@@ -58,7 +59,8 @@ class QTestTree(QTreeWidget):
cst.TYPE_GRAPH_ACTION.item_name : QTestTreePlotAction,
cst.TYPE_GROUP.item_name : QTestTreeItemGroup,
cst.TYPE_GIT.item_name : QTestTreeItemGit,
cst.TYPE_FUNCTION.item_name : QTestTreeItemFunc,
cst.TYPE_PY_FUNCTION.item_name : QTestTreeItemPyFunc,
cst.TYPE_LUA_FUNCTION.item_name : QTestTreeItemLuaFunc,
cst.TYPE_LET.item_name : QTestTreeItemLet,
cst.TYPE_CHECK.item_name : QTestTreeItemCheckValue,
cst.TYPE_JSON_RPC.item_name : QTestTreeItemJSONRPC,

View File

@@ -0,0 +1,9 @@
from .test_tree_item import QTestTreeItem
from interpreter.utils.icons import icon_prefix
class QTestTreeItemLuaFunc(QTestTreeItem):
def __init__(self, parent, test_set_item, cols):
super().__init__(parent, test_set_item, cols)
self.setRowIcon(icon_prefix() + "/text-x-lua.png")

View File

@@ -2,7 +2,7 @@
from .test_tree_item import QTestTreeItem
from interpreter.utils.icons import icon_prefix
class QTestTreeItemFunc(QTestTreeItem):
class QTestTreeItemPyFunc(QTestTreeItem):
def __init__(self, parent, test_set_item, cols):
super().__init__(parent, test_set_item, cols)
self.setRowIcon(icon_prefix() + "/text-x-python.png")

View File

@@ -30,7 +30,7 @@ def main():
outstream = TcpStdOut()
stdio_redir.redirect(outstream)
# debug the server
thrd_api.dbg_out = stdio_redir.ini_stdout
# thrd_api.dbg_out = stdio_redir.ini_stdout
try:
while thrd_api.is_alive():
thrd_api.join(1)