No installed extension. ")
+ end
+
+ webserver.content_send("
")
+
+ webserver.content_send("
Online Store"
+ " "
+ " (This feature requires an internet connection) "
+ "")
+ # "
(This feature requires an internet connection)
")
+
+ webserver.content_send("
[ Loading from Store... ] ")
+
+ webserver.content_button(webserver.BUTTON_MANAGEMENT) #- button back to management page -#
+ webserver.content_stop()
+ end
+
+ #####################################################################################################
+ # Extension Store
+ #####################################################################################################
+ def page_extensions_store()
+ import webserver
+ import string
+ import json
+
+ webserver.content_open(200, "text/html")
+ # read manifest from ota.tasmota.com
+ var item_jsonl
+ try
+ item_jsonl = self.load_manifest()
+ except .. as e, m
+ webserver.content_send("
[ Error loading manifest. ] ")
+ webserver.content_send(f"
{webserver.html_escape(m)}
")
+ webserver.content_close()
+ return
+ end
+ var item_json_count = string.count(item_jsonl, '"name":')
+
+ webserver.content_send("
")
+
+ webserver.content_send(f"")
+
+ webserver.content_send(" "
+ "
")
+
+ # Read extensions in file system
+ # as a map tapp_name -> wd_path, ex {'Leds_Panel.tapp': '/.extensions/Leds_Panel.tapp'}
+ var installed_ext = self.list_installed_ext()
+
+ # Now parse application manifests
+ var item_idx = 1
+ var json_pos = 0 # starting char to parse JSONL
+ while (json_pos < size(item_jsonl)) # item_idx negative means that we have nothing more to display
+ var lf_pos = string.find(item_jsonl, "\n", json_pos)
+ if (lf_pos < 0) lf_pos = size(item_jsonl) end # go to end of string
+ # extract the json from the line
+ var json_line = item_jsonl[json_pos .. lf_pos]
+
+ # ex: {"name":"Leds Panel","file":"Leds_Panel.tapp","version":"0x19090100","description":"Real-time display of WS2812 LEDs in browser with smooth animations and pattern editor.","author":"Stephan Hadinger"}
+ var entry = self.manifest_decode(json_line)
+
+ if (entry != nil)
+ # entry is guaranteed to have the following fields: 'name', 'description', 'file', 'version', 'author'
+ var app_version = entry['version']
+ var app_version_web = self.version_string(app_version)
+ var app_name_web = webserver.html_escape(entry['name'])
+ var app_file = entry['file']
+ var app_description_web = string.replace(webserver.html_escape(entry['description']), '\\n', ' ')
+ var app_author = entry['author']
+
+ # now compute the status
+ var installed = false
+ var installed_version
+ var installed_tapp_name
+ installed_tapp_name = self.tapp_name(entry['file'])
+ var installed_tapp_name_web = webserver.html_escape(installed_tapp_name)
+ installed = installed_ext.contains(installed_tapp_name)
+ var installed_path_web
+ if installed
+ var installed_path = installed_ext[installed_tapp_name]
+ installed_path_web = webserver.html_escape(installed_path)
+ var details = tasmota.read_extension_manifest(installed_path)
+ installed_version = int(details.find('version', 0))
+ end
+ # We have 3 options:
+ # - 'installed == false', only button "Install"
+ # - 'installed' and 'installed_version < app_version', buttons "Upgrade" and "Delete"
+ # - else 'installed' and version more recent, 1 button "Delete"
+ var upgrade = installed && (installed_version < app_version)
+
+ webserver.content_send(f""
+ ""
+ "
"
+ "
"
+ "{app_description_web}")
+ if upgrade
+ webserver.content_send( f" {self.version_string(installed_version)} → {app_version_web}")
+ end
+ webserver.content_send( "
"
+ "
"
+ "
"
+ "
")
+
+ item_idx += 1
+ end
+
+ json_pos = lf_pos + 1
+ end
+
+ webserver.content_send("
")
+ webserver.content_close()
+ end
+
+ #####################################################################################################
+ # Load manifest from ota.tasmota.com
+ #####################################################################################################
+ def load_manifest()
+ try
+ var arch = tasmota.arch() # architecture, ex: "esp32" - not used currently but might be useful
+ var version = f"0x{tasmota.version():08X}"
+
+ var url = f"{self.EXT_REPO}{self.EXT_REPO_MANIFEST}?a={arch}&v={version}"
+ log(f"EXT: fetching extensions manifest '{url}'", 3)
+ # Add architeture and version information
+ # They are not used for now but may be interesting in the future to serve
+ # different content based on architecture (Ex: ESP32) and version (ex: 0x0E060001 for 14.6.0.1)
+ # load the template
+ var cl = webclient()
+ cl.begin(url)
+ var r = cl.GET()
+ if r != 200
+ tasmota.log(f"EXT: error fetching manifest {r}", 2)
+ raise "webclient_error", f"Error fetching manifest code={r}"
+ end
+ var s = cl.get_string()
+ cl.close()
+ return s
+ except .. as e, m
+ tasmota.log(format("EXT: exception '%s' - '%s'", e, m), 2)
+ raise e, m
+ end
+ end
+
+ #####################################################################################################
+ # Web controller
+ #
+ # Applies the changes and restart
+ #####################################################################################################
+ # This HTTP POST manager handles the submitted web form data
+ def page_extensions_ctl()
+ import webserver
+ import path
+ import string
+ if !webserver.check_privileged_access() return nil end
+
+ try
+ # log(f">>> {webserver.arg_name(0)=} {webserver.arg(0)=} {webserver.arg_size()=}")
+ # var redirect_to_store = false # add suffix to redirect to store
+
+ var btn_name = webserver.arg_name(0)
+ var action = btn_name[0] # first character
+ var action_path = btn_name[1..] # remove first character
+
+ if (action == "r") # button "Run"
+ if (action_path != "")
+ # log(f"EXT: run '{action_path}'")
+ tasmota.load(action_path)
+ end
+ elif (action == "s") # button "Stop"
+ # log(f"EXT: stop '{action_path}'")
+ tasmota.unload_extension(action_path)
+ elif (action == "a") || (action == "A") # button "Autorun", "A" enable, "a" disable
+ var new_name
+ if (action == "a") && string.endswith(action_path, ".tapp") # Autorun is enabled, disable it
+ new_name = action_path[0..-5] + "tapp_"
+ elif (action == "A") && string.endswith(action_path, ".tapp_")
+ new_name = action_path[0..-6] + "tapp"
+ end
+ if new_name
+ var success = path.rename(action_path, new_name)
+ # log(f"EXT: rename '{action_path}' to '{new_name} {success=}", 3)
+ if (success) # update any running extension with its new name
+ if tasmota._ext.contains(action_path)
+ tasmota._ext[new_name] = tasmota._ext[action_path]
+ tasmota._ext.remove(action_path)
+ end
+ end
+ else
+ log(f"EXT: wrong action '{btn_name}'", 3)
+ end
+ elif (action == 'd') # button "Delete"
+ if (action_path != "")
+ # first stop if it was running
+ tasmota.unload_extension(action_path)
+ # then delete file
+ var success = path.remove(action_path)
+ # log(f"EXT: delete '{action_path}' {success=}", 3)
+ end
+
+ # Now try the store commands
+ elif (action == 'u') # Upgrade ext
+ # log(f"EXT: upgrade '{action_path}'", 3)
+ # first stop the app if it's running
+ tasmota.unload_extension(action_path)
+ self.install_from_store(self.tapp_name(action_path))
+ # redirect_to_store = true
+ elif (action == 'i') # Install ext
+ # log(f"EXT: install '{action_path}'", 3)
+ self.install_from_store(self.tapp_name(action_path))
+ # redirect_to_store = true
+ end
+
+ # var redirect_suffix = redirect_to_store ? "store=" : ""
+ # webserver.redirect(f"/ext?{redirect_suffix}")
+ webserver.redirect(f"/ext")
+ except .. as e, m
+ log(f"CFG: Exception> '{e}' - {m}", 2)
+ #- display error page -#
+ webserver.content_start("Parameter error") #- title of the web page -#
+ webserver.content_send_style() #- send standard Tasmota styles -#
+
+ webserver.content_send(f"
Exception: '{webserver.html_escape(e)}' {webserver.html_escape(m)}
")
+
+ webserver.content_button(webserver.BUTTON_CONFIGURATION) #- button back to management page -#
+ webserver.content_stop() #- end of web page -#
+ end
+ end
+
+ # Add HTTP POST and GET handlers
+ def web_add_handler()
+ import webserver
+ webserver.on('/ext', / -> self.page_extensions_mgr_dispatcher(), webserver.HTTP_GET)
+ webserver.on('/ext', / -> self.page_extensions_ctl(), webserver.HTTP_POST)
+ end
+end
+
+extension_manager.Extension_manager = Extension_manager
+extension_manager.init = def (m)
+ return m.Extension_manager() # return an instance of this class
+end
diff --git a/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be b/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be
index 7c9ad8f7a..25bff1e81 100644
--- a/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be
+++ b/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be
@@ -599,8 +599,8 @@ class Tasmota
# Ex: f_name = '/app.zip#autoexec'
# if ends with ".tapp", add "#autoexec"
- # there's a trick here, since actual prefix may be ".tapp" or "._tapp" (the later for no-autp-run)
- if string.endswith(f_name, 'tapp')
+ # prefix may be ".tapp" or ".tapp_"
+ if string.endswith(f_name, '.tapp') || string.endswith(f_name, '.tapp_')
f_name += "#autoexec"
end
@@ -845,6 +845,95 @@ class Tasmota
end
end
+ ######################################################################
+ # add_extension
+ #
+ # Add an instance to the dispatchin of Berry events
+ #
+ # Args:
+ # - `d`: instance (or driver)
+ # The events will be dispatched to this instance whenever
+ # it has a method with the same name of the instance
+ # - `ext_path`: the path of the extension, usually a '.tapp' file
+ ######################################################################
+ def add_extension(d, ext_path) # add ext
+ if (ext_path == nil)
+ ext_path = tasmota.wd
+ end
+
+ if (type(d) != 'instance') || (type(ext_path) != 'string')
+ raise "value_error", "instance and name required"
+ end
+ if (ext_path != nil)
+ import string
+ # initialize self._ext if it does not exist
+ if self._ext == nil
+ self._ext = sortedmap()
+ end
+ if string.endswith(ext_path, '#')
+ ext_path = ext_path[0..-2] # remove trailing '#''
+ end
+ if self._ext.contains(ext_path)
+ log(f"BRY: Extension '{ext_path}' already registered", 3)
+ else
+ self._ext[ext_path] = d
+ end
+ end
+ end
+
+ ######################################################################
+ # read_extension_manifest
+ #
+ # Read and parse the 'manifest.json' file in the 'wd' (working dir)
+ #
+ # Args:
+ # - `wd`: (string) working dir indicating which .tapp file to read
+ # ex: 'Partition_Wizard.tapp#'
+ # Returns: map of values from JSON, or `nil` if an error occured
+ #
+ # Returned map is eitner `nil` if failed or a map with guaranteed content:
+ # - name (string)
+ # - description (string), default ""
+ # - version (int), default 0
+ # - min_tasmota(int), default 0
+ #
+ ######################################################################
+ def read_extension_manifest(wd_or_instance)
+ var f
+ var wd = wd_or_instance
+ try
+ import json
+ import string
+
+ if (wd == nil) wd = tasmota.wd end # if 'wd' is nil, use the current `tasmota.wd`
+
+ var delimiter = ((size(wd) > 0) && (wd[-1] != '/') && (wd[-1] != '#')) ? '#' : '' # add '#' delimiter if filename
+ f = open(wd + delimiter + 'manifest.json')
+ var s = f.read()
+ f.close()
+ var j = json.load(s)
+ # check if valid, 'name' is mandatory
+ var name = j.find('name')
+ if name
+ # convert version numbers if present
+ j['name'] = str(j['name'])
+ j['description'] = str(j.find('description', ''))
+ j['version'] = int(j.find('version', 0))
+ j['min_tasmota'] = int(j.find('min_tasmota', 0))
+ j['autorun'] = string.endswith(wd, ".tapp")
+ return j
+ else
+ return nil
+ end
+ except .. as e, m
+ log(f"BRY: error {e} {m} when reading 'manifest.json' in '{wd}'")
+ if (f != nil)
+ f.close()
+ end
+ return nil
+ end
+ end
+
def remove_driver(d)
if self._drivers
var idx = self._drivers.find(d)
@@ -852,6 +941,31 @@ class Tasmota
self._drivers.pop(idx)
end
end
+ # remove ext
+ if self._ext
+ self._ext.remove_by_value(d)
+ end
+ end
+
+ def unload_extension(name_or_instance)
+ if (self._ext == nil) return end
+ var d = name_or_instance # d = driver
+
+ if type(name_or_instance) == 'string'
+ d = self._ext.find(name_or_instance)
+ end
+ if type(d) == 'instance'
+ import introspect
+
+ if introspect.contains(d, "unload")
+ d.unload()
+ end
+ self.remove_driver(d)
+ end
+ # force gc of instance
+ name_or_instance = nil
+ d = nil
+ tasmota.gc()
end
# cmd high-level function
diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_extension_manager.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_extension_manager.h
new file mode 100644
index 000000000..73b862b96
--- /dev/null
+++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_extension_manager.h
@@ -0,0 +1,1563 @@
+/* Solidification of extension_manager.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+extern const bclass be_class_Extension_manager;
+// compact class 'Extension_manager' ktab size: 157, total: 254 (saved 776 bytes)
+static const bvalue be_ktab_class_Extension_manager[157] = {
+ /* K0 */ be_nested_str(tasmota),
+ /* K1 */ be_nested_str(arch),
+ /* K2 */ be_nested_str(0x_X2508X),
+ /* K3 */ be_nested_str(version),
+ /* K4 */ be_nested_str(_X25s_X25s_X3Fa_X3D_X25s_X26v_X3D_X25s),
+ /* K5 */ be_nested_str(EXT_REPO),
+ /* K6 */ be_nested_str(EXT_REPO_MANIFEST),
+ /* K7 */ be_nested_str(log),
+ /* K8 */ be_nested_str(EXT_X3A_X20fetching_X20extensions_X20manifest_X20_X27_X25s_X27),
+ /* K9 */ be_const_int(3),
+ /* K10 */ be_nested_str(webclient),
+ /* K11 */ be_nested_str(begin),
+ /* K12 */ be_nested_str(GET),
+ /* K13 */ be_nested_str(EXT_X3A_X20error_X20fetching_X20manifest_X20_X25s),
+ /* K14 */ be_const_int(2),
+ /* K15 */ be_nested_str(Error_X20fetching_X20manifest_X20code_X3D_X25s),
+ /* K16 */ be_nested_str(webclient_error),
+ /* K17 */ be_nested_str(get_string),
+ /* K18 */ be_nested_str(close),
+ /* K19 */ be_nested_str(EXT_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27),
+ /* K20 */ be_const_class(be_class_Extension_manager),
+ /* K21 */ be_nested_str(string),
+ /* K22 */ be_const_int(0),
+ /* K23 */ be_const_int(1),
+ /* K24 */ be_nested_str(_X23),
+ /* K25 */ be_nested_str(_),
+ /* K26 */ be_nested_str(find),
+ /* K27 */ be_nested_str(_X2Etapp),
+ /* K28 */ be_nested_str(_X2F),
+ /* K29 */ be_nested_str(webserver),
+ /* K30 */ be_nested_str(content_start),
+ /* K31 */ be_nested_str(Extensions_X20Manager),
+ /* K32 */ be_nested_str(content_send_style),
+ /* K33 */ be_nested_str(content_send),
+ /* K34 */ be_nested_str(_X3Cdiv_X20style_X3D_X27padding_X3A0px_X205px_X3Btext_X2Dalign_X3Acenter_X3B_X27_X3E_X3Ch3_X3E_X3Chr_X3EExtension_X20Manager_X3Chr_X3E_X3C_X2Fh3_X3E_X3C_X2Fdiv_X3E),
+ /* K35 */ be_nested_str_long(_X3Cscript_X3Efunction_X20loadext_X28_X29_X20_X7Beb_X28_X27store_X27_X29_X2Edisabled_X3Dtrue_X3Bx_X3Dnew_X20XMLHttpRequest_X28_X29_X3Bx_X2Etimeout_X3D4000_X3Bx_X2Eonreadystatechange_X20_X3D_X20_X28_X29_X20_X3D_X3E_X20_X7Bif_X28x_X2EreadyState_X3D_X3D4_X29_X7Bif_X28x_X2Estatus_X3D_X3D200_X29_X7Beb_X28_X27inet_X27_X29_X2Estyle_X2Edisplay_X3D_X27none_X27_X3Beb_X28_X27store_X27_X29_X2EouterHTML_X3Dx_X2EresponseText_X3B_X7D_X7D_X7D_X3Bx_X2Eopen_X28_X27GET_X27_X2C_X27_X3Fstore_X3D_X27_X29_X3Bx_X2Esend_X28_X29_X3B_X7Dwindow_X2Eonload_X3Dfunction_X28_X29_X7Bloadext_X28_X29_X3B_X7D_X3Bfunction_X20toggleDesc_X28id_X29_X20_X7Bvar_X20desc_X20_X3D_X20document_X2EgetElementById_X28_X27desc_X2D_X27_X20_X2B_X20id_X29_X3Bvar_X20arrow_X20_X3D_X20document_X2EgetElementById_X28_X27arrow_X2D_X27_X20_X2B_X20id_X29_X3Bif_X20_X28desc_X2Estyle_X2Edisplay_X20_X3D_X3D_X3D_X20_X27none_X27_X20_X7C_X7C_X20desc_X2Estyle_X2Edisplay_X20_X3D_X3D_X3D_X20_X27_X27_X29_X20_X7Bdesc_X2Estyle_X2Edisplay_X20_X3D_X20_X27block_X27_X3Barrow_X2EinnerHTML_X20_X3D_X20_X27_XE2_X96_XBC_X27_X3B_X7D_X20else_X20_X7Bdesc_X2Estyle_X2Edisplay_X20_X3D_X20_X27none_X27_X3Barrow_X2EinnerHTML_X20_X3D_X20_X27_XE2_X96_XB6_X27_X3B_X7D_X7Dfunction_X20filterExtensions_X28query_X29_X20_X7Bvar_X20items_X20_X3D_X20document_X2EgetElementsByClassName_X28_X27ext_X2Dstore_X2Ditem_X27_X29_X3Bquery_X20_X3D_X20query_X2EtoLowerCase_X28_X29_X3Bfor_X20_X28var_X20i_X20_X3D_X200_X3B_X20i_X20_X3C_X20items_X2Elength_X3B_X20i_X2B_X2B_X29_X20_X7Bvar_X20name_X20_X3D_X20items_X5Bi_X5D_X2EgetElementsByClassName_X28_X27ext_X2Dname_X27_X29_X5B0_X5D_X2EtextContent_X2EtoLowerCase_X28_X29_X3Bvar_X20desc_X20_X3D_X20items_X5Bi_X5D_X2EgetElementsByClassName_X28_X27ext_X2Ddesc_X27_X29_X5B0_X5D_X2EtextContent_X2EtoLowerCase_X28_X29_X3Bif_X20_X28name_X2Eincludes_X28query_X29_X20_X7C_X7C_X20desc_X2Eincludes_X28query_X29_X29_X20_X7Bitems_X5Bi_X5D_X2Estyle_X2Edisplay_X20_X3D_X20_X27block_X27_X3B_X7D_X20else_X20_X7Bitems_X5Bi_X5D_X2Estyle_X2Edisplay_X20_X3D_X20_X27none_X27_X3B_X7D_X7D_X7D_X3C_X2Fscript_X3E),
+ /* K36 */ be_nested_str_long(_X3Cfieldset_X20style_X3D_X27padding_X3A0_X205px_X3B_X27_X3E_X3Cstyle_X3E_X2Eext_X2Ditem_X7Bwidth_X3Amin_X2Dcontent_X3Bmin_X2Dwidth_X3A100_X25_X3B_X7D_X2Eext_X2Ditem_X20small_X7Bdisplay_X3Ablock_X3Bword_X2Dwrap_X3Abreak_X2Dword_X3Boverflow_X2Dwrap_X3Abreak_X2Dword_X3Bwhite_X2Dspace_X3Anormal_X3Bpadding_X2Dright_X3A5px_X3Bpadding_X2Dtop_X3A2px_X3B_X7D_X2Eext_X2Dcontrols_X7Bdisplay_X3Aflex_X3Bgap_X3A8px_X3Balign_X2Ditems_X3Acenter_X3Bmargin_X2Dtop_X3A4px_X3Bpadding_X3A0px_X7D_X2Ebtn_X2Dsmall_X7Bpadding_X3A0_X206px_X3Bline_X2Dheight_X3A1_X2E8rem_X3Bfont_X2Dsize_X3A0_X2E9rem_X3Bmin_X2Dwidth_X3Aauto_X3Bwidth_X3Aauto_X3Bflex_X2Dshrink_X3A0_X3B_X7Dform_X7Bpadding_X2Dtop_X3A0px_X3Bpadding_X2Dbottom_X3A0px_X3B_X7D_X2Erunning_X2Dindicator_X7Bdisplay_X3Ainline_X2Dblock_X3Bwidth_X3A8px_X3Bheight_X3A8px_X3Bborder_X2Dradius_X3A50_X25_X3Bmargin_X2Dright_X3A8px_X3Bbackground_X3Avar_X28_X2D_X2Dc_btnsvhvr_X29_X3Banimation_X3Apulse_X201_X2E5s_X20infinite_X3B_X7D_X40keyframes_X20pulse_X7B0_X25_X7Bopacity_X3A1_X3B_X7D50_X25_X7Bopacity_X3A0_X2E5_X3B_X7D100_X25_X7Bopacity_X3A1_X3B_X7D_X7D_X2Estore_X2Dheader_X7Bdisplay_X3Aflex_X3Bjustify_X2Dcontent_X3Aspace_X2Dbetween_X3Balign_X2Ditems_X3Acenter_X3Bmargin_X2Dbottom_X3A10px_X3B_X7D_X2Estore_X2Dstats_X7Bfont_X2Dsize_X3A0_X2E9em_X3Bcolor_X3Avar_X28_X2D_X2Dc_in_X29_X3B_X7D_X2Eext_X2Dstore_X2Ditem_X7Bbackground_X3Avar_X28_X2D_X2Dc_bg_X29_X3Bborder_X2Dradius_X3A0_X2E3em_X3Bmargin_X2Dbottom_X3A5px_X3Bpadding_X3A4px_X3B_X7D_X2Eext_X2Dheader_X7Bdisplay_X3Aflex_X3Bjustify_X2Dcontent_X3Aspace_X2Dbetween_X3Balign_X2Ditems_X3Acenter_X3Bcursor_X3Apointer_X3Buser_X2Dselect_X3Anone_X3Bpadding_X3A5px_X3B_X7D_X2Eext_X2Dtitle_X7Bdisplay_X3Aflex_X3Balign_X2Ditems_X3Acenter_X3Bgap_X3A6px_X3Bflex_X3A1_X3Bpadding_X3A0_X3B_X7D_X2Eext_X2Dname_X7Bfont_X2Dweight_X3Abold_X3B_X7D_X2Eext_X2Dversion_X7Bfont_X2Dsize_X3A0_X2E8em_X3B_X7D_X2Eext_X2Darrow_X7Bcolor_X3Avar_X28_X2D_X2Dc_in_X29_X3Bfont_X2Dsize_X3A0_X2E8em_X3B_X7D_X2Eext_X2Dbadges_X7Bpadding_X3A0_X3B_X7D_X2Eext_X2Ddetails_X7Bwidth_X3Amin_X2Dcontent_X3Bmin_X2Dwidth_X3A100_X25_X3Bpadding_X3A0_X3Bdisplay_X3Anone_X3B_X7D_X2Eext_X2Ddesc_X7Bcolor_X3Avar_X28_X2D_X2Dc_in_X29_X3Bfont_X2Dsize_X3A0_X2E8em_X3Bline_X2Dheight_X3A1_X2E4_X3Bdisplay_X3Ablock_X3Bword_X2Dwrap_X3Abreak_X2Dword_X3Boverflow_X2Dwrap_X3Abreak_X2Dword_X3Bwhite_X2Dspace_X3Anormal_X3Bpadding_X3A0_X205px_X3B_X7D_X2Eext_X2Dactions_X7Bdisplay_X3Aflex_X3Bgap_X3A8px_X3Bpadding_X3A5px_X3B_X7D_X2Ebtn_X2Daction_X7Bpadding_X3A0_X2012px_X3Bline_X2Dheight_X3A1_X2E8em_X3Bfont_X2Dsize_X3A0_X2E9em_X3Bflex_X3A1_X3B_X7D_X2Einstalled_X2Dbadge_X7Bborder_X2Dcolor_X3Avar_X28_X2D_X2Dc_btnhvr_X29_X3Bpadding_X3A0px_X204px_X3Bborder_X2Dradius_X3A4px_X3Bfont_X2Dsize_X3A0_X2E7em_X3Bborder_X2Dwidth_X3A2px_X3Bborder_X2Dstyle_X3Asolid_X3Bmargin_X2Dright_X3A3px_X3B_X7D_X2Eupdate_X2Dbadge_X7Bbackground_X3Avar_X28_X2D_X2Dc_btnhvr_X29_X3Bpadding_X3A2px_X206px_X3Bborder_X2Dradius_X3A4px_X3Bfont_X2Dsize_X3A0_X2E7em_X3Bmargin_X2Dright_X3A3px_X3Banimation_X3Apulse_X202s_X20infinite_X3B_X7D_X40keyframes_X20pulse_X7B0_X25_X7Bopacity_X3A1_X3B_X7D50_X25_X7Bopacity_X3A0_X2E7_X3B_X7D100_X25_X7Bopacity_X3A1_X3B_X7D_X7D_X3C_X2Fstyle_X3E_X3Clegend_X3E_X3Cb_X20title_X3D_X27Running_X20extensions_X27_X3E_X26nbsp_X3BInstalled_X20extensions_X3C_X2Fb_X3E_X3C_X2Flegend_X3E),
+ /* K37 */ be_nested_str(list_extensions_in_fs),
+ /* K38 */ be_nested_str(_X3Chr_X20style_X3D_X27margin_X3A2px_X200_X200_X200_X3B_X27_X3E),
+ /* K39 */ be_nested_str(get_by_index),
+ /* K40 */ be_nested_str(html_escape),
+ /* K41 */ be_nested_str(read_extension_manifest),
+ /* K42 */ be_nested_str(_ext),
+ /* K43 */ be_nested_str(contains),
+ /* K44 */ be_nested_str(_X20_X3Cspan_X20class_X3D_X27running_X2Dindicator_X27_X20title_X3D_X27Running_X27_X3E_X3C_X2Fspan_X3E),
+ /* K45 */ be_nested_str(),
+ /* K46 */ be_nested_str(autorun),
+ /* K47 */ be_nested_str(style_X3D_X27background_X3Avar_X28_X2D_X2Dc_btnsvhvr_X29_X3B_X27),
+ /* K48 */ be_nested_str(style_X3D_X27background_X3Avar_X28_X2D_X2Dc_btnoff_X29_X3B_X27),
+ /* K49 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Ditem_X27_X3E),
+ /* K50 */ be_nested_str(_X3Cspan_X20title_X3D_X27path_X3A_X20_X25s_X27_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X25s_X3C_X2Fspan_X3E_X3Cbr_X3E),
+ /* K51 */ be_nested_str(name),
+ /* K52 */ be_nested_str(_X3Csmall_X3E_X25s_X3C_X2Fsmall_X3E),
+ /* K53 */ be_nested_str(description),
+ /* K54 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dcontrols_X27_X20style_X3D_X27padding_X2Dtop_X3A0px_X3Bpadding_X2Dbottom_X3A0px_X3B_X27_X3E),
+ /* K55 */ be_nested_str(_X3Cform_X20action_X3D_X27_X2Fext_X27_X20method_X3D_X27post_X27_X20class_X3D_X27ext_X2Dcontrols_X27_X3E),
+ /* K56 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Dsmall_X27_X20_X25s_X20name_X3D_X27_X25s_X25s_X27_X3E_X25s_X3C_X2Fbutton_X3E),
+ /* K57 */ be_nested_str(s),
+ /* K58 */ be_nested_str(r),
+ /* K59 */ be_nested_str(Running),
+ /* K60 */ be_nested_str(Stopped),
+ /* K61 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Dsmall_X27_X20_X25s_X20name_X3D_X27_X25s_X25s_X27_X3EAuto_X2Drun_X3A_X20_X25s_X3C_X2Fbutton_X3E),
+ /* K62 */ be_nested_str(a),
+ /* K63 */ be_nested_str(A),
+ /* K64 */ be_nested_str(ON),
+ /* K65 */ be_nested_str(OFF),
+ /* K66 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Dsmall_X20bred_X27_X20name_X3D_X27d_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20deletion_X20of_X20_X25s_X22_X29_X27_X3EUninstall_X3C_X2Fbutton_X3E),
+ /* K67 */ be_nested_str(_X3C_X2Fform_X3E_X3C_X2Fdiv_X3E_X3C_X2Fdiv_X3E),
+ /* K68 */ be_nested_str(_X3Cdiv_X3E_X3Csmall_X3E_X3Ci_X3ENo_X20installed_X20extension_X2E_X3C_X2Fi_X3E_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E),
+ /* K69 */ be_nested_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K70 */ be_nested_str(_X3Cdiv_X20style_X3D_X27padding_X3A0px_X205px_X3Btext_X2Dalign_X3Acenter_X3B_X27_X3E_X3Ch3_X3E_X3Chr_X3EOnline_X20Store_X3Chr_X20style_X3D_X27margin_X2Dbottom_X3A0_X3B_X27_X3E_X3Cspan_X20id_X3D_X27inet_X27_X20style_X3D_X27font_X2Dsize_X3Asmall_X3Bfont_X2Dweight_X3Anormal_X3B_X27_X27_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fspan_X3E_X3C_X2Fh3_X3E_X3C_X2Fdiv_X3E),
+ /* K71 */ be_nested_str(_X3Cb_X20id_X3D_X27store_X27_X3E_X5B_X20_X3Cspan_X20style_X3D_X27color_X3Avar_X28_X2D_X2Dc_btnsv_X29_X3B_X27_X3ELoading_X20from_X20Store_X2E_X2E_X2E_X3C_X2Fspan_X3E_X20_X5D_X3C_X2Fb_X3E),
+ /* K72 */ be_nested_str(content_button),
+ /* K73 */ be_nested_str(BUTTON_MANAGEMENT),
+ /* K74 */ be_nested_str(content_stop),
+ /* K75 */ be_nested_str(tapp_name),
+ /* K76 */ be_nested_str(endswith),
+ /* K77 */ be_nested_str(_X25s_X25s_X25s),
+ /* K78 */ be_nested_str(EXT_REPO_FOLDER),
+ /* K79 */ be_nested_str(EXT_X3A_X20installing_X20from_X20_X27_X25s_X27),
+ /* K80 */ be_nested_str(_X25s_X25s),
+ /* K81 */ be_nested_str(EXT_FOLDER),
+ /* K82 */ be_nested_str(EXT_X3A_X20return_code_X3D_X25s),
+ /* K83 */ be_nested_str(write_file),
+ /* K84 */ be_nested_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27),
+ /* K85 */ be_nested_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3Cform_X20id_X3Dbut_part_mgr_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27ext_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EExtension_X20Manager_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K86 */ be_nested_str(list_extensions),
+ /* K87 */ be_nested_str(stop_iteration),
+ /* K88 */ be_nested_str(path),
+ /* K89 */ be_nested_str(listdir),
+ /* K90 */ be_nested_str(_X2Etapp_),
+ /* K91 */ be_nested_str(push),
+ /* K92 */ be_nested_str(check_privileged_access),
+ /* K93 */ be_nested_str(arg_name),
+ /* K94 */ be_const_int(2147483647),
+ /* K95 */ be_nested_str(load),
+ /* K96 */ be_nested_str(unload_extension),
+ /* K97 */ be_nested_str(tapp_),
+ /* K98 */ be_nested_str(tapp),
+ /* K99 */ be_nested_str(rename),
+ /* K100 */ be_nested_str(remove),
+ /* K101 */ be_nested_str(EXT_X3A_X20wrong_X20action_X20_X27_X25s_X27),
+ /* K102 */ be_nested_str(d),
+ /* K103 */ be_nested_str(u),
+ /* K104 */ be_nested_str(install_from_store),
+ /* K105 */ be_nested_str(i),
+ /* K106 */ be_nested_str(redirect),
+ /* K107 */ be_nested_str(_X2Fext),
+ /* K108 */ be_nested_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s),
+ /* K109 */ be_nested_str(Parameter_X20error),
+ /* K110 */ be_nested_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E),
+ /* K111 */ be_nested_str(BUTTON_CONFIGURATION),
+ /* K112 */ be_nested_str(on),
+ /* K113 */ be_nested_str(HTTP_GET),
+ /* K114 */ be_nested_str(HTTP_POST),
+ /* K115 */ be_nested_str(sortedmap),
+ /* K116 */ be_nested_str(EXT_X3A_X20unable_X20to_X20read_X20details_X20from_X20_X27_X25s_X27),
+ /* K117 */ be_nested_str(add_driver),
+ /* K118 */ be_nested_str(json),
+ /* K119 */ be_nested_str(content_open),
+ /* K120 */ be_nested_str(text_X2Fhtml),
+ /* K121 */ be_nested_str(load_manifest),
+ /* K122 */ be_nested_str(_X3Cb_X20id_X3D_X27store_X27_X3E_X5B_X20_X3Cspan_X20style_X3D_X27color_X3Avar_X28_X2D_X2Dc_btnrst_X29_X3B_X27_X3EError_X20loading_X20manifest_X2E_X3C_X2Fspan_X3E_X20_X5D_X3C_X2Fb_X3E),
+ /* K123 */ be_nested_str(_X3Cp_X3E_X3Csmall_X3E_X25s_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E),
+ /* K124 */ be_nested_str(content_close),
+ /* K125 */ be_nested_str(count),
+ /* K126 */ be_nested_str(_X22name_X22_X3A),
+ /* K127 */ be_nested_str(_X3Cfieldset_X20id_X3D_X27store_X27_X3E),
+ /* K128 */ be_nested_str(_X3Cdiv_X20class_X3D_X27store_X2Dheader_X27_X3E_X3Cspan_X3EBrowse_X20Extensions_X3C_X2Fspan_X3E_X3Cspan_X20class_X3D_X27store_X2Dstats_X27_X3E_X25s_X20available_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E),
+ /* K129 */ be_nested_str(_X3Cinput_X20type_X3D_X27text_X27_X20placeholder_X3D_X27Search_X20extensions_X2E_X2E_X2E_X27_X20onkeyup_X3D_X27filterExtensions_X28this_X2Evalue_X29_X27_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K130 */ be_nested_str(list_installed_ext),
+ /* K131 */ be_nested_str(_X0A),
+ /* K132 */ be_nested_str(manifest_decode),
+ /* K133 */ be_nested_str(version_string),
+ /* K134 */ be_nested_str(file),
+ /* K135 */ be_nested_str(replace),
+ /* K136 */ be_nested_str(_X5Cn),
+ /* K137 */ be_nested_str(_X3Cbr_X3E),
+ /* K138 */ be_nested_str(author),
+ /* K139 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dstore_X2Ditem_X27_X3E_X3Cdiv_X20class_X3D_X27ext_X2Dheader_X27_X20onclick_X3D_X27toggleDesc_X28_X22_X25s_X22_X29_X27_X3E_X3Cdiv_X20class_X3D_X27ext_X2Dtitle_X27_X3E_X3Cspan_X20class_X3D_X27ext_X2Dname_X27_X3E_X25s_X3C_X2Fspan_X3E_X3Cspan_X20class_X3D_X27ext_X2Dversion_X27_X3E_X3Csmall_X3E_X25s_X3C_X2Fsmall_X3E_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E),
+ /* K140 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dbadges_X27_X3E_X3Cspan_X20class_X3D_X27update_X2Dbadge_X27_X3EUpgrade_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E),
+ /* K141 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dbadges_X27_X3E_X3Cspan_X20class_X3D_X27installed_X2Dbadge_X27_X3EInstalled_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E),
+ /* K142 */ be_nested_str(_X3Cspan_X20id_X3D_X27arrow_X2D_X25s_X27_X20class_X3D_X27ext_X2Darrow_X27_X3E_XE2_X96_XB6_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E_X3Cdiv_X20id_X3D_X27desc_X2D_X25s_X27_X20class_X3D_X27ext_X2Ddetails_X27_X3E_X3Cdiv_X20class_X3D_X27ext_X2Ddesc_X27_X3E_X25s),
+ /* K143 */ be_nested_str(_X3Cbr_X3E_X25s_X20_XE2_X86_X92_X20_X25s),
+ /* K144 */ be_nested_str(_X3C_X2Fdiv_X3E_X3Cform_X20action_X3D_X27_X2Fext_X27_X20method_X3D_X27post_X27_X20class_X3D_X27ext_X2Dactions_X27_X3E_X3Cdiv_X20style_X3D_X27width_X3A30_X25_X27_X3E_X3C_X2Fdiv_X3E),
+ /* K145 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X27_X20name_X3D_X27u_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20upgrade_X20of_X20_X25s_X22_X29_X27_X3EUpgrade_X3C_X2Fbutton_X3E),
+ /* K146 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X27_X20style_X3D_X27visibility_X3Ahidden_X3B_X27_X3E_X3C_X2Fbutton_X3E),
+ /* K147 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X20bred_X27_X20name_X3D_X27d_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20deletion_X20of_X20_X25s_X22_X29_X27_X3EUninstall_X3C_X2Fbutton_X3E),
+ /* K148 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X27_X20style_X3D_X27visibility_X3Ahidden_X3B_X27_X3E_X3C_X2Fbutton_X3E_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X20bgrn_X27_X20name_X3D_X27i_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20installation_X20of_X20_X25s_X22_X29_X27_X3EInstall_X3C_X2Fbutton_X3E),
+ /* K149 */ be_nested_str(v_X25s_X2E_X25s_X2E_X25s_X2E_X25s),
+ /* K150 */ be_nested_str(has_arg),
+ /* K151 */ be_nested_str(store),
+ /* K152 */ be_nested_str(page_extensions_store),
+ /* K153 */ be_nested_str(page_extensions_mgr),
+ /* K154 */ be_nested_str(EXT_X3A_X20unable_X20to_X20parse_X20manifest_X20line_X20_X27_X25s_X27),
+ /* K155 */ be_nested_str(EXT_X3A_X20manifest_X20is_X20missing_X20_X27name_X2Ffile_X2Fversion_X27_X20in_X20map_X20_X27_X25s_X27),
+ /* K156 */ be_nested_str(_X5Bno_X20description_X5D),
+};
+
+
+extern const bclass be_class_Extension_manager;
+
+/********************************************************************
+** Solidified function: load_manifest
+********************************************************************/
+be_local_closure(class_Extension_manager_load_manifest, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_load_manifest,
+ &be_const_str_solidified,
+ ( &(const binstruction[70]) { /* code */
+ 0xA8020035, // 0000 EXBLK 0 #0037
+ 0xB8060000, // 0001 GETNGBL R1 K0
+ 0x8C040301, // 0002 GETMET R1 R1 K1
+ 0x7C040200, // 0003 CALL R1 1
+ 0x60080018, // 0004 GETGBL R2 G24
+ 0x580C0002, // 0005 LDCONST R3 K2
+ 0xB8120000, // 0006 GETNGBL R4 K0
+ 0x8C100903, // 0007 GETMET R4 R4 K3
+ 0x7C100200, // 0008 CALL R4 1
+ 0x7C080400, // 0009 CALL R2 2
+ 0x600C0018, // 000A GETGBL R3 G24
+ 0x58100004, // 000B LDCONST R4 K4
+ 0x88140105, // 000C GETMBR R5 R0 K5
+ 0x88180106, // 000D GETMBR R6 R0 K6
+ 0x5C1C0200, // 000E MOVE R7 R1
+ 0x5C200400, // 000F MOVE R8 R2
+ 0x7C0C0A00, // 0010 CALL R3 5
+ 0xB8120E00, // 0011 GETNGBL R4 K7
+ 0x60140018, // 0012 GETGBL R5 G24
+ 0x58180008, // 0013 LDCONST R6 K8
+ 0x5C1C0600, // 0014 MOVE R7 R3
+ 0x7C140400, // 0015 CALL R5 2
+ 0x58180009, // 0016 LDCONST R6 K9
+ 0x7C100400, // 0017 CALL R4 2
+ 0xB8121400, // 0018 GETNGBL R4 K10
+ 0x7C100000, // 0019 CALL R4 0
+ 0x8C14090B, // 001A GETMET R5 R4 K11
+ 0x5C1C0600, // 001B MOVE R7 R3
+ 0x7C140400, // 001C CALL R5 2
+ 0x8C14090C, // 001D GETMET R5 R4 K12
+ 0x7C140200, // 001E CALL R5 1
+ 0x541A00C7, // 001F LDINT R6 200
+ 0x20180A06, // 0020 NE R6 R5 R6
+ 0x781A000C, // 0021 JMPF R6 #002F
+ 0xB81A0000, // 0022 GETNGBL R6 K0
+ 0x8C180D07, // 0023 GETMET R6 R6 K7
+ 0x60200018, // 0024 GETGBL R8 G24
+ 0x5824000D, // 0025 LDCONST R9 K13
+ 0x5C280A00, // 0026 MOVE R10 R5
+ 0x7C200400, // 0027 CALL R8 2
+ 0x5824000E, // 0028 LDCONST R9 K14
+ 0x7C180600, // 0029 CALL R6 3
+ 0x60180018, // 002A GETGBL R6 G24
+ 0x581C000F, // 002B LDCONST R7 K15
+ 0x5C200A00, // 002C MOVE R8 R5
+ 0x7C180400, // 002D CALL R6 2
+ 0xB0062006, // 002E RAISE 1 K16 R6
+ 0x8C180911, // 002F GETMET R6 R4 K17
+ 0x7C180200, // 0030 CALL R6 1
+ 0x8C1C0912, // 0031 GETMET R7 R4 K18
+ 0x7C1C0200, // 0032 CALL R7 1
+ 0xA8040001, // 0033 EXBLK 1 1
+ 0x80040C00, // 0034 RET 1 R6
+ 0xA8040001, // 0035 EXBLK 1 1
+ 0x7002000D, // 0036 JMP #0045
+ 0xAC040002, // 0037 CATCH R1 0 2
+ 0x7002000A, // 0038 JMP #0044
+ 0xB80E0000, // 0039 GETNGBL R3 K0
+ 0x8C0C0707, // 003A GETMET R3 R3 K7
+ 0x60140018, // 003B GETGBL R5 G24
+ 0x58180013, // 003C LDCONST R6 K19
+ 0x5C1C0200, // 003D MOVE R7 R1
+ 0x5C200400, // 003E MOVE R8 R2
+ 0x7C140600, // 003F CALL R5 3
+ 0x5818000E, // 0040 LDCONST R6 K14
+ 0x7C0C0600, // 0041 CALL R3 3
+ 0xB0040202, // 0042 RAISE 1 R1 R2
+ 0x70020000, // 0043 JMP #0045
+ 0xB0080000, // 0044 RAISE 2 R0 R0
+ 0x80000000, // 0045 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tapp_name
+********************************************************************/
+be_local_closure(class_Extension_manager_tapp_name, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_tapp_name,
+ &be_const_str_solidified,
+ ( &(const binstruction[44]) { /* code */
+ 0x58040014, // 0000 LDCONST R1 K20
+ 0xA40A2A00, // 0001 IMPORT R2 K21
+ 0x580C0016, // 0002 LDCONST R3 K22
+ 0x6010000C, // 0003 GETGBL R4 G12
+ 0x5C140000, // 0004 MOVE R5 R0
+ 0x7C100200, // 0005 CALL R4 1
+ 0x04100917, // 0006 SUB R4 R4 K23
+ 0x94140004, // 0007 GETIDX R5 R0 R4
+ 0x1C140B18, // 0008 EQ R5 R5 K24
+ 0x74160002, // 0009 JMPT R5 #000D
+ 0x94140004, // 000A GETIDX R5 R0 R4
+ 0x1C140B19, // 000B EQ R5 R5 K25
+ 0x78160000, // 000C JMPF R5 #000E
+ 0x04100917, // 000D SUB R4 R4 K23
+ 0x8C14051A, // 000E GETMET R5 R2 K26
+ 0x5C1C0000, // 000F MOVE R7 R0
+ 0x5820001B, // 0010 LDCONST R8 K27
+ 0x00240917, // 0011 ADD R9 R4 K23
+ 0x6028000C, // 0012 GETGBL R10 G12
+ 0x582C001B, // 0013 LDCONST R11 K27
+ 0x7C280200, // 0014 CALL R10 1
+ 0x0424120A, // 0015 SUB R9 R9 R10
+ 0x7C140800, // 0016 CALL R5 4
+ 0x28140B16, // 0017 GE R5 R5 K22
+ 0x78160003, // 0018 JMPF R5 #001D
+ 0x6014000C, // 0019 GETGBL R5 G12
+ 0x5818001B, // 001A LDCONST R6 K27
+ 0x7C140200, // 001B CALL R5 1
+ 0x04100805, // 001C SUB R4 R4 R5
+ 0x4C140000, // 001D LDNIL R5
+ 0x8C18051A, // 001E GETMET R6 R2 K26
+ 0x5C200000, // 001F MOVE R8 R0
+ 0x5824001C, // 0020 LDCONST R9 K28
+ 0x5C280600, // 0021 MOVE R10 R3
+ 0x7C180800, // 0022 CALL R6 4
+ 0x5C140C00, // 0023 MOVE R5 R6
+ 0x28180D16, // 0024 GE R6 R6 K22
+ 0x781A0002, // 0025 JMPF R6 #0029
+ 0x00180B17, // 0026 ADD R6 R5 K23
+ 0x5C0C0C00, // 0027 MOVE R3 R6
+ 0x7001FFF4, // 0028 JMP #001E
+ 0x40180604, // 0029 CONNECT R6 R3 R4
+ 0x94180006, // 002A GETIDX R6 R0 R6
+ 0x80040C00, // 002B RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: page_extensions_mgr
+********************************************************************/
+be_local_closure(class_Extension_manager_page_extensions_mgr, /* name */
+ be_nested_proto(
+ 21, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_page_extensions_mgr,
+ &be_const_str_solidified,
+ ( &(const binstruction[161]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0xA40A2A00, // 0001 IMPORT R2 K21
+ 0x8C0C031E, // 0002 GETMET R3 R1 K30
+ 0x5814001F, // 0003 LDCONST R5 K31
+ 0x7C0C0400, // 0004 CALL R3 2
+ 0x8C0C0320, // 0005 GETMET R3 R1 K32
+ 0x7C0C0200, // 0006 CALL R3 1
+ 0x8C0C0321, // 0007 GETMET R3 R1 K33
+ 0x58140022, // 0008 LDCONST R5 K34
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x8C0C0321, // 000A GETMET R3 R1 K33
+ 0x58140023, // 000B LDCONST R5 K35
+ 0x7C0C0400, // 000C CALL R3 2
+ 0x8C0C0321, // 000D GETMET R3 R1 K33
+ 0x58140024, // 000E LDCONST R5 K36
+ 0x7C0C0400, // 000F CALL R3 2
+ 0x8C0C0125, // 0010 GETMET R3 R0 K37
+ 0x50140200, // 0011 LDBOOL R5 1 0
+ 0x7C0C0400, // 0012 CALL R3 2
+ 0x6010000C, // 0013 GETGBL R4 G12
+ 0x5C140600, // 0014 MOVE R5 R3
+ 0x7C100200, // 0015 CALL R4 1
+ 0x24100916, // 0016 GT R4 R4 K22
+ 0x78120076, // 0017 JMPF R4 #008F
+ 0x58100016, // 0018 LDCONST R4 K22
+ 0x6014000C, // 0019 GETGBL R5 G12
+ 0x5C180600, // 001A MOVE R6 R3
+ 0x7C140200, // 001B CALL R5 1
+ 0x14140805, // 001C LT R5 R4 R5
+ 0x7816006F, // 001D JMPF R5 #008E
+ 0x24140916, // 001E GT R5 R4 K22
+ 0x78160002, // 001F JMPF R5 #0023
+ 0x8C140321, // 0020 GETMET R5 R1 K33
+ 0x581C0026, // 0021 LDCONST R7 K38
+ 0x7C140400, // 0022 CALL R5 2
+ 0x8C140727, // 0023 GETMET R5 R3 K39
+ 0x5C1C0800, // 0024 MOVE R7 R4
+ 0x7C140400, // 0025 CALL R5 2
+ 0x8C180328, // 0026 GETMET R6 R1 K40
+ 0x5C200A00, // 0027 MOVE R8 R5
+ 0x7C180400, // 0028 CALL R6 2
+ 0xB81E0000, // 0029 GETNGBL R7 K0
+ 0x8C1C0F29, // 002A GETMET R7 R7 K41
+ 0x5C240A00, // 002B MOVE R9 R5
+ 0x7C1C0400, // 002C CALL R7 2
+ 0xB8220000, // 002D GETNGBL R8 K0
+ 0x8820112A, // 002E GETMBR R8 R8 K42
+ 0x78220005, // 002F JMPF R8 #0036
+ 0xB8220000, // 0030 GETNGBL R8 K0
+ 0x8820112A, // 0031 GETMBR R8 R8 K42
+ 0x8C20112B, // 0032 GETMET R8 R8 K43
+ 0x5C280A00, // 0033 MOVE R10 R5
+ 0x7C200400, // 0034 CALL R8 2
+ 0x70020000, // 0035 JMP #0037
+ 0x50200000, // 0036 LDBOOL R8 0 0
+ 0x78220001, // 0037 JMPF R8 #003A
+ 0x5824002C, // 0038 LDCONST R9 K44
+ 0x70020000, // 0039 JMP #003B
+ 0x5824002D, // 003A LDCONST R9 K45
+ 0x8C280F1A, // 003B GETMET R10 R7 K26
+ 0x5830002E, // 003C LDCONST R12 K46
+ 0x50340000, // 003D LDBOOL R13 0 0
+ 0x7C280600, // 003E CALL R10 3
+ 0x582C002F, // 003F LDCONST R11 K47
+ 0x58300030, // 0040 LDCONST R12 K48
+ 0x8C340321, // 0041 GETMET R13 R1 K33
+ 0x583C0031, // 0042 LDCONST R15 K49
+ 0x7C340400, // 0043 CALL R13 2
+ 0x8C340321, // 0044 GETMET R13 R1 K33
+ 0x603C0018, // 0045 GETGBL R15 G24
+ 0x58400032, // 0046 LDCONST R16 K50
+ 0x5C440C00, // 0047 MOVE R17 R6
+ 0x8C480328, // 0048 GETMET R18 R1 K40
+ 0x94500F33, // 0049 GETIDX R20 R7 K51
+ 0x7C480400, // 004A CALL R18 2
+ 0x5C4C1200, // 004B MOVE R19 R9
+ 0x7C3C0800, // 004C CALL R15 4
+ 0x7C340400, // 004D CALL R13 2
+ 0x8C340321, // 004E GETMET R13 R1 K33
+ 0x603C0018, // 004F GETGBL R15 G24
+ 0x58400034, // 0050 LDCONST R16 K52
+ 0x8C440328, // 0051 GETMET R17 R1 K40
+ 0x944C0F35, // 0052 GETIDX R19 R7 K53
+ 0x7C440400, // 0053 CALL R17 2
+ 0x7C3C0400, // 0054 CALL R15 2
+ 0x7C340400, // 0055 CALL R13 2
+ 0x8C340321, // 0056 GETMET R13 R1 K33
+ 0x583C0036, // 0057 LDCONST R15 K54
+ 0x7C340400, // 0058 CALL R13 2
+ 0x8C340321, // 0059 GETMET R13 R1 K33
+ 0x583C0037, // 005A LDCONST R15 K55
+ 0x7C340400, // 005B CALL R13 2
+ 0x8C340321, // 005C GETMET R13 R1 K33
+ 0x603C0018, // 005D GETGBL R15 G24
+ 0x58400038, // 005E LDCONST R16 K56
+ 0x78220001, // 005F JMPF R8 #0062
+ 0x5C441600, // 0060 MOVE R17 R11
+ 0x70020000, // 0061 JMP #0063
+ 0x5C441800, // 0062 MOVE R17 R12
+ 0x78220001, // 0063 JMPF R8 #0066
+ 0x58480039, // 0064 LDCONST R18 K57
+ 0x70020000, // 0065 JMP #0067
+ 0x5848003A, // 0066 LDCONST R18 K58
+ 0x5C4C0C00, // 0067 MOVE R19 R6
+ 0x78220001, // 0068 JMPF R8 #006B
+ 0x5850003B, // 0069 LDCONST R20 K59
+ 0x70020000, // 006A JMP #006C
+ 0x5850003C, // 006B LDCONST R20 K60
+ 0x7C3C0A00, // 006C CALL R15 5
+ 0x7C340400, // 006D CALL R13 2
+ 0x8C340321, // 006E GETMET R13 R1 K33
+ 0x603C0018, // 006F GETGBL R15 G24
+ 0x5840003D, // 0070 LDCONST R16 K61
+ 0x782A0001, // 0071 JMPF R10 #0074
+ 0x5844002D, // 0072 LDCONST R17 K45
+ 0x70020000, // 0073 JMP #0075
+ 0x5C441800, // 0074 MOVE R17 R12
+ 0x782A0001, // 0075 JMPF R10 #0078
+ 0x5848003E, // 0076 LDCONST R18 K62
+ 0x70020000, // 0077 JMP #0079
+ 0x5848003F, // 0078 LDCONST R18 K63
+ 0x5C4C0C00, // 0079 MOVE R19 R6
+ 0x782A0001, // 007A JMPF R10 #007D
+ 0x58500040, // 007B LDCONST R20 K64
+ 0x70020000, // 007C JMP #007E
+ 0x58500041, // 007D LDCONST R20 K65
+ 0x7C3C0A00, // 007E CALL R15 5
+ 0x7C340400, // 007F CALL R13 2
+ 0x8C340321, // 0080 GETMET R13 R1 K33
+ 0x603C0018, // 0081 GETGBL R15 G24
+ 0x58400042, // 0082 LDCONST R16 K66
+ 0x5C440C00, // 0083 MOVE R17 R6
+ 0x8C480328, // 0084 GETMET R18 R1 K40
+ 0x5C500A00, // 0085 MOVE R20 R5
+ 0x7C480400, // 0086 CALL R18 2
+ 0x7C3C0600, // 0087 CALL R15 3
+ 0x7C340400, // 0088 CALL R13 2
+ 0x8C340321, // 0089 GETMET R13 R1 K33
+ 0x583C0043, // 008A LDCONST R15 K67
+ 0x7C340400, // 008B CALL R13 2
+ 0x00100917, // 008C ADD R4 R4 K23
+ 0x7001FF8A, // 008D JMP #0019
+ 0x70020002, // 008E JMP #0092
+ 0x8C100321, // 008F GETMET R4 R1 K33
+ 0x58180044, // 0090 LDCONST R6 K68
+ 0x7C100400, // 0091 CALL R4 2
+ 0x8C100321, // 0092 GETMET R4 R1 K33
+ 0x58180045, // 0093 LDCONST R6 K69
+ 0x7C100400, // 0094 CALL R4 2
+ 0x8C100321, // 0095 GETMET R4 R1 K33
+ 0x58180046, // 0096 LDCONST R6 K70
+ 0x7C100400, // 0097 CALL R4 2
+ 0x8C100321, // 0098 GETMET R4 R1 K33
+ 0x58180047, // 0099 LDCONST R6 K71
+ 0x7C100400, // 009A CALL R4 2
+ 0x8C100348, // 009B GETMET R4 R1 K72
+ 0x88180349, // 009C GETMBR R6 R1 K73
+ 0x7C100400, // 009D CALL R4 2
+ 0x8C10034A, // 009E GETMET R4 R1 K74
+ 0x7C100200, // 009F CALL R4 1
+ 0x80000000, // 00A0 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: install_from_store
+********************************************************************/
+be_local_closure(class_Extension_manager_install_from_store, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_install_from_store,
+ &be_const_str_solidified,
+ ( &(const binstruction[72]) { /* code */
+ 0xA40A2A00, // 0000 IMPORT R2 K21
+ 0x8C0C014B, // 0001 GETMET R3 R0 K75
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0x5C040600, // 0004 MOVE R1 R3
+ 0x8C0C054C, // 0005 GETMET R3 R2 K76
+ 0x5C140200, // 0006 MOVE R5 R1
+ 0x5818001B, // 0007 LDCONST R6 K27
+ 0x7C0C0600, // 0008 CALL R3 3
+ 0x740E0000, // 0009 JMPT R3 #000B
+ 0x0004031B, // 000A ADD R1 R1 K27
+ 0x600C0018, // 000B GETGBL R3 G24
+ 0x5810004D, // 000C LDCONST R4 K77
+ 0x88140105, // 000D GETMBR R5 R0 K5
+ 0x8818014E, // 000E GETMBR R6 R0 K78
+ 0x5C1C0200, // 000F MOVE R7 R1
+ 0x7C0C0800, // 0010 CALL R3 4
+ 0xB8120E00, // 0011 GETNGBL R4 K7
+ 0x60140018, // 0012 GETGBL R5 G24
+ 0x5818004F, // 0013 LDCONST R6 K79
+ 0x5C1C0600, // 0014 MOVE R7 R3
+ 0x7C140400, // 0015 CALL R5 2
+ 0x58180009, // 0016 LDCONST R6 K9
+ 0x7C100400, // 0017 CALL R4 2
+ 0xA802001E, // 0018 EXBLK 0 #0038
+ 0x60100018, // 0019 GETGBL R4 G24
+ 0x58140050, // 001A LDCONST R5 K80
+ 0x88180151, // 001B GETMBR R6 R0 K81
+ 0x5C1C0200, // 001C MOVE R7 R1
+ 0x7C100600, // 001D CALL R4 3
+ 0xB8161400, // 001E GETNGBL R5 K10
+ 0x7C140000, // 001F CALL R5 0
+ 0x8C180B0B, // 0020 GETMET R6 R5 K11
+ 0x5C200600, // 0021 MOVE R8 R3
+ 0x7C180400, // 0022 CALL R6 2
+ 0x8C180B0C, // 0023 GETMET R6 R5 K12
+ 0x7C180200, // 0024 CALL R6 1
+ 0x541E00C7, // 0025 LDINT R7 200
+ 0x201C0C07, // 0026 NE R7 R6 R7
+ 0x781E0008, // 0027 JMPF R7 #0031
+ 0xB81E0E00, // 0028 GETNGBL R7 K7
+ 0x60200018, // 0029 GETGBL R8 G24
+ 0x58240052, // 002A LDCONST R9 K82
+ 0x5C280C00, // 002B MOVE R10 R6
+ 0x7C200400, // 002C CALL R8 2
+ 0x5824000E, // 002D LDCONST R9 K14
+ 0x7C1C0400, // 002E CALL R7 2
+ 0xA8040001, // 002F EXBLK 1 1
+ 0x80000E00, // 0030 RET 0
+ 0x8C1C0B53, // 0031 GETMET R7 R5 K83
+ 0x5C240800, // 0032 MOVE R9 R4
+ 0x7C1C0400, // 0033 CALL R7 2
+ 0x8C1C0B12, // 0034 GETMET R7 R5 K18
+ 0x7C1C0200, // 0035 CALL R7 1
+ 0xA8040001, // 0036 EXBLK 1 1
+ 0x7002000E, // 0037 JMP #0047
+ 0xAC100002, // 0038 CATCH R4 0 2
+ 0x7002000B, // 0039 JMP #0046
+ 0xB81A0000, // 003A GETNGBL R6 K0
+ 0x8C180D07, // 003B GETMET R6 R6 K7
+ 0x60200018, // 003C GETGBL R8 G24
+ 0x58240054, // 003D LDCONST R9 K84
+ 0x5C280800, // 003E MOVE R10 R4
+ 0x5C2C0A00, // 003F MOVE R11 R5
+ 0x7C200600, // 0040 CALL R8 3
+ 0x5824000E, // 0041 LDCONST R9 K14
+ 0x7C180600, // 0042 CALL R6 3
+ 0x4C180000, // 0043 LDNIL R6
+ 0x80040C00, // 0044 RET 1 R6
+ 0x70020000, // 0045 JMP #0047
+ 0xB0080000, // 0046 RAISE 2 R0 R0
+ 0x80000000, // 0047 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: web_add_button
+********************************************************************/
+be_local_closure(class_Extension_manager_web_add_button, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_web_add_button,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0x8C080321, // 0001 GETMET R2 R1 K33
+ 0x58100055, // 0002 LDCONST R4 K85
+ 0x7C080400, // 0003 CALL R2 2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: list_installed_ext
+********************************************************************/
+be_local_closure(class_Extension_manager_list_installed_ext, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 0, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_list_installed_ext,
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x58000014, // 0000 LDCONST R0 K20
+ 0x60040013, // 0001 GETGBL R1 G19
+ 0x7C040000, // 0002 CALL R1 0
+ 0x60080010, // 0003 GETGBL R2 G16
+ 0x8C0C0156, // 0004 GETMET R3 R0 K86
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x7C080200, // 0006 CALL R2 1
+ 0xA8020006, // 0007 EXBLK 0 #000F
+ 0x5C0C0400, // 0008 MOVE R3 R2
+ 0x7C0C0000, // 0009 CALL R3 0
+ 0x8C10014B, // 000A GETMET R4 R0 K75
+ 0x5C180600, // 000B MOVE R6 R3
+ 0x7C100400, // 000C CALL R4 2
+ 0x98040803, // 000D SETIDX R1 R4 R3
+ 0x7001FFF8, // 000E JMP #0008
+ 0x58080057, // 000F LDCONST R2 K87
+ 0xAC080200, // 0010 CATCH R2 1 0
+ 0xB0080000, // 0011 RAISE 2 R0 R0
+ 0x80040200, // 0012 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: list_extensions
+********************************************************************/
+be_local_closure(class_Extension_manager_list_extensions, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 0, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_list_extensions,
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0x58000014, // 0000 LDCONST R0 K20
+ 0xA406B000, // 0001 IMPORT R1 K88
+ 0xA40A2A00, // 0002 IMPORT R2 K21
+ 0x600C0012, // 0003 GETGBL R3 G18
+ 0x7C0C0000, // 0004 CALL R3 0
+ 0x60100010, // 0005 GETGBL R4 G16
+ 0x8C140359, // 0006 GETMET R5 R1 K89
+ 0x881C0151, // 0007 GETMBR R7 R0 K81
+ 0x7C140400, // 0008 CALL R5 2
+ 0x7C100200, // 0009 CALL R4 1
+ 0xA8020010, // 000A EXBLK 0 #001C
+ 0x5C140800, // 000B MOVE R5 R4
+ 0x7C140000, // 000C CALL R5 0
+ 0x8C18054C, // 000D GETMET R6 R2 K76
+ 0x5C200A00, // 000E MOVE R8 R5
+ 0x5824001B, // 000F LDCONST R9 K27
+ 0x7C180600, // 0010 CALL R6 3
+ 0x741A0004, // 0011 JMPT R6 #0017
+ 0x8C18054C, // 0012 GETMET R6 R2 K76
+ 0x5C200A00, // 0013 MOVE R8 R5
+ 0x5824005A, // 0014 LDCONST R9 K90
+ 0x7C180600, // 0015 CALL R6 3
+ 0x781A0003, // 0016 JMPF R6 #001B
+ 0x8C18075B, // 0017 GETMET R6 R3 K91
+ 0x88200151, // 0018 GETMBR R8 R0 K81
+ 0x00201005, // 0019 ADD R8 R8 R5
+ 0x7C180400, // 001A CALL R6 2
+ 0x7001FFEE, // 001B JMP #000B
+ 0x58100057, // 001C LDCONST R4 K87
+ 0xAC100200, // 001D CATCH R4 1 0
+ 0xB0080000, // 001E RAISE 2 R0 R0
+ 0x80040600, // 001F RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: page_extensions_ctl
+********************************************************************/
+be_local_closure(class_Extension_manager_page_extensions_ctl, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_page_extensions_ctl,
+ &be_const_str_solidified,
+ ( &(const binstruction[165]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0xA40AB000, // 0001 IMPORT R2 K88
+ 0xA40E2A00, // 0002 IMPORT R3 K21
+ 0x8C10035C, // 0003 GETMET R4 R1 K92
+ 0x7C100200, // 0004 CALL R4 1
+ 0x74120001, // 0005 JMPT R4 #0008
+ 0x4C100000, // 0006 LDNIL R4
+ 0x80040800, // 0007 RET 1 R4
+ 0xA8020079, // 0008 EXBLK 0 #0083
+ 0x8C10035D, // 0009 GETMET R4 R1 K93
+ 0x58180016, // 000A LDCONST R6 K22
+ 0x7C100400, // 000B CALL R4 2
+ 0x94140916, // 000C GETIDX R5 R4 K22
+ 0x401A2F5E, // 000D CONNECT R6 K23 K94
+ 0x94180806, // 000E GETIDX R6 R4 R6
+ 0x1C1C0B3A, // 000F EQ R7 R5 K58
+ 0x781E0006, // 0010 JMPF R7 #0018
+ 0x201C0D2D, // 0011 NE R7 R6 K45
+ 0x781E0003, // 0012 JMPF R7 #0017
+ 0xB81E0000, // 0013 GETNGBL R7 K0
+ 0x8C1C0F5F, // 0014 GETMET R7 R7 K95
+ 0x5C240C00, // 0015 MOVE R9 R6
+ 0x7C1C0400, // 0016 CALL R7 2
+ 0x70020063, // 0017 JMP #007C
+ 0x1C1C0B39, // 0018 EQ R7 R5 K57
+ 0x781E0004, // 0019 JMPF R7 #001F
+ 0xB81E0000, // 001A GETNGBL R7 K0
+ 0x8C1C0F60, // 001B GETMET R7 R7 K96
+ 0x5C240C00, // 001C MOVE R9 R6
+ 0x7C1C0400, // 001D CALL R7 2
+ 0x7002005C, // 001E JMP #007C
+ 0x1C1C0B3E, // 001F EQ R7 R5 K62
+ 0x741E0001, // 0020 JMPT R7 #0023
+ 0x1C1C0B3F, // 0021 EQ R7 R5 K63
+ 0x781E0039, // 0022 JMPF R7 #005D
+ 0x4C1C0000, // 0023 LDNIL R7
+ 0x1C200B3E, // 0024 EQ R8 R5 K62
+ 0x7822000A, // 0025 JMPF R8 #0031
+ 0x8C20074C, // 0026 GETMET R8 R3 K76
+ 0x5C280C00, // 0027 MOVE R10 R6
+ 0x582C001B, // 0028 LDCONST R11 K27
+ 0x7C200600, // 0029 CALL R8 3
+ 0x78220005, // 002A JMPF R8 #0031
+ 0x5421FFFA, // 002B LDINT R8 -5
+ 0x40222C08, // 002C CONNECT R8 K22 R8
+ 0x94200C08, // 002D GETIDX R8 R6 R8
+ 0x00201161, // 002E ADD R8 R8 K97
+ 0x5C1C1000, // 002F MOVE R7 R8
+ 0x7002000B, // 0030 JMP #003D
+ 0x1C200B3F, // 0031 EQ R8 R5 K63
+ 0x78220009, // 0032 JMPF R8 #003D
+ 0x8C20074C, // 0033 GETMET R8 R3 K76
+ 0x5C280C00, // 0034 MOVE R10 R6
+ 0x582C005A, // 0035 LDCONST R11 K90
+ 0x7C200600, // 0036 CALL R8 3
+ 0x78220004, // 0037 JMPF R8 #003D
+ 0x5421FFF9, // 0038 LDINT R8 -6
+ 0x40222C08, // 0039 CONNECT R8 K22 R8
+ 0x94200C08, // 003A GETIDX R8 R6 R8
+ 0x00201162, // 003B ADD R8 R8 K98
+ 0x5C1C1000, // 003C MOVE R7 R8
+ 0x781E0016, // 003D JMPF R7 #0055
+ 0x8C200563, // 003E GETMET R8 R2 K99
+ 0x5C280C00, // 003F MOVE R10 R6
+ 0x5C2C0E00, // 0040 MOVE R11 R7
+ 0x7C200600, // 0041 CALL R8 3
+ 0x78220010, // 0042 JMPF R8 #0054
+ 0xB8260000, // 0043 GETNGBL R9 K0
+ 0x8824132A, // 0044 GETMBR R9 R9 K42
+ 0x8C24132B, // 0045 GETMET R9 R9 K43
+ 0x5C2C0C00, // 0046 MOVE R11 R6
+ 0x7C240400, // 0047 CALL R9 2
+ 0x7826000A, // 0048 JMPF R9 #0054
+ 0xB8260000, // 0049 GETNGBL R9 K0
+ 0x8824132A, // 004A GETMBR R9 R9 K42
+ 0xB82A0000, // 004B GETNGBL R10 K0
+ 0x8828152A, // 004C GETMBR R10 R10 K42
+ 0x94281406, // 004D GETIDX R10 R10 R6
+ 0x98240E0A, // 004E SETIDX R9 R7 R10
+ 0xB8260000, // 004F GETNGBL R9 K0
+ 0x8824132A, // 0050 GETMBR R9 R9 K42
+ 0x8C241364, // 0051 GETMET R9 R9 K100
+ 0x5C2C0C00, // 0052 MOVE R11 R6
+ 0x7C240400, // 0053 CALL R9 2
+ 0x70020006, // 0054 JMP #005C
+ 0xB8220E00, // 0055 GETNGBL R8 K7
+ 0x60240018, // 0056 GETGBL R9 G24
+ 0x58280065, // 0057 LDCONST R10 K101
+ 0x5C2C0800, // 0058 MOVE R11 R4
+ 0x7C240400, // 0059 CALL R9 2
+ 0x58280009, // 005A LDCONST R10 K9
+ 0x7C200400, // 005B CALL R8 2
+ 0x7002001E, // 005C JMP #007C
+ 0x1C1C0B66, // 005D EQ R7 R5 K102
+ 0x781E0009, // 005E JMPF R7 #0069
+ 0x201C0D2D, // 005F NE R7 R6 K45
+ 0x781E0006, // 0060 JMPF R7 #0068
+ 0xB81E0000, // 0061 GETNGBL R7 K0
+ 0x8C1C0F60, // 0062 GETMET R7 R7 K96
+ 0x5C240C00, // 0063 MOVE R9 R6
+ 0x7C1C0400, // 0064 CALL R7 2
+ 0x8C1C0564, // 0065 GETMET R7 R2 K100
+ 0x5C240C00, // 0066 MOVE R9 R6
+ 0x7C1C0400, // 0067 CALL R7 2
+ 0x70020012, // 0068 JMP #007C
+ 0x1C1C0B67, // 0069 EQ R7 R5 K103
+ 0x781E0009, // 006A JMPF R7 #0075
+ 0xB81E0000, // 006B GETNGBL R7 K0
+ 0x8C1C0F60, // 006C GETMET R7 R7 K96
+ 0x5C240C00, // 006D MOVE R9 R6
+ 0x7C1C0400, // 006E CALL R7 2
+ 0x8C1C0168, // 006F GETMET R7 R0 K104
+ 0x8C24014B, // 0070 GETMET R9 R0 K75
+ 0x5C2C0C00, // 0071 MOVE R11 R6
+ 0x7C240400, // 0072 CALL R9 2
+ 0x7C1C0400, // 0073 CALL R7 2
+ 0x70020006, // 0074 JMP #007C
+ 0x1C1C0B69, // 0075 EQ R7 R5 K105
+ 0x781E0004, // 0076 JMPF R7 #007C
+ 0x8C1C0168, // 0077 GETMET R7 R0 K104
+ 0x8C24014B, // 0078 GETMET R9 R0 K75
+ 0x5C2C0C00, // 0079 MOVE R11 R6
+ 0x7C240400, // 007A CALL R9 2
+ 0x7C1C0400, // 007B CALL R7 2
+ 0x8C1C036A, // 007C GETMET R7 R1 K106
+ 0x60240018, // 007D GETGBL R9 G24
+ 0x5828006B, // 007E LDCONST R10 K107
+ 0x7C240200, // 007F CALL R9 1
+ 0x7C1C0400, // 0080 CALL R7 2
+ 0xA8040001, // 0081 EXBLK 1 1
+ 0x70020020, // 0082 JMP #00A4
+ 0xAC100002, // 0083 CATCH R4 0 2
+ 0x7002001D, // 0084 JMP #00A3
+ 0xB81A0E00, // 0085 GETNGBL R6 K7
+ 0x601C0018, // 0086 GETGBL R7 G24
+ 0x5820006C, // 0087 LDCONST R8 K108
+ 0x5C240800, // 0088 MOVE R9 R4
+ 0x5C280A00, // 0089 MOVE R10 R5
+ 0x7C1C0600, // 008A CALL R7 3
+ 0x5820000E, // 008B LDCONST R8 K14
+ 0x7C180400, // 008C CALL R6 2
+ 0x8C18031E, // 008D GETMET R6 R1 K30
+ 0x5820006D, // 008E LDCONST R8 K109
+ 0x7C180400, // 008F CALL R6 2
+ 0x8C180320, // 0090 GETMET R6 R1 K32
+ 0x7C180200, // 0091 CALL R6 1
+ 0x8C180321, // 0092 GETMET R6 R1 K33
+ 0x60200018, // 0093 GETGBL R8 G24
+ 0x5824006E, // 0094 LDCONST R9 K110
+ 0x8C280328, // 0095 GETMET R10 R1 K40
+ 0x5C300800, // 0096 MOVE R12 R4
+ 0x7C280400, // 0097 CALL R10 2
+ 0x8C2C0328, // 0098 GETMET R11 R1 K40
+ 0x5C340A00, // 0099 MOVE R13 R5
+ 0x7C2C0400, // 009A CALL R11 2
+ 0x7C200600, // 009B CALL R8 3
+ 0x7C180400, // 009C CALL R6 2
+ 0x8C180348, // 009D GETMET R6 R1 K72
+ 0x8820036F, // 009E GETMBR R8 R1 K111
+ 0x7C180400, // 009F CALL R6 2
+ 0x8C18034A, // 00A0 GETMET R6 R1 K74
+ 0x7C180200, // 00A1 CALL R6 1
+ 0x70020000, // 00A2 JMP #00A4
+ 0xB0080000, // 00A3 RAISE 2 R0 R0
+ 0x80000000, // 00A4 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: web_add_handler
+********************************************************************/
+be_local_closure(class_Extension_manager_web_add_handler, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 2, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(page_extensions_mgr_dispatcher),
+ }),
+ &be_const_str__X3Clambda_X3E,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x7C000200, // 0002 CALL R0 1
+ 0x80040000, // 0003 RET 1 R0
+ })
+ ),
+ be_nested_proto(
+ 2, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(page_extensions_ctl),
+ }),
+ &be_const_str__X3Clambda_X3E,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x7C000200, // 0002 CALL R0 1
+ 0x80040000, // 0003 RET 1 R0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_web_add_handler,
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0x8C080370, // 0001 GETMET R2 R1 K112
+ 0x5810006B, // 0002 LDCONST R4 K107
+ 0x84140000, // 0003 CLOSURE R5 P0
+ 0x88180371, // 0004 GETMBR R6 R1 K113
+ 0x7C080800, // 0005 CALL R2 4
+ 0x8C080370, // 0006 GETMET R2 R1 K112
+ 0x5810006B, // 0007 LDCONST R4 K107
+ 0x84140001, // 0008 CLOSURE R5 P1
+ 0x88180372, // 0009 GETMBR R6 R1 K114
+ 0x7C080800, // 000A CALL R2 4
+ 0xA0000000, // 000B CLOSE R0
+ 0x80000000, // 000C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: list_extensions_in_fs
+********************************************************************/
+be_local_closure(class_Extension_manager_list_extensions_in_fs, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 0, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_list_extensions_in_fs,
+ &be_const_str_solidified,
+ ( &(const binstruction[36]) { /* code */
+ 0x58000014, // 0000 LDCONST R0 K20
+ 0xA4062A00, // 0001 IMPORT R1 K21
+ 0xB80AE600, // 0002 GETNGBL R2 K115
+ 0x7C080000, // 0003 CALL R2 0
+ 0x600C0010, // 0004 GETGBL R3 G16
+ 0x8C100156, // 0005 GETMET R4 R0 K86
+ 0x7C100200, // 0006 CALL R4 1
+ 0x7C0C0200, // 0007 CALL R3 1
+ 0xA8020016, // 0008 EXBLK 0 #0020
+ 0x5C100600, // 0009 MOVE R4 R3
+ 0x7C100000, // 000A CALL R4 0
+ 0xB8160000, // 000B GETNGBL R5 K0
+ 0x8C140B29, // 000C GETMET R5 R5 K41
+ 0x5C1C0800, // 000D MOVE R7 R4
+ 0x7C140400, // 000E CALL R5 2
+ 0x4C180000, // 000F LDNIL R6
+ 0x20180A06, // 0010 NE R6 R5 R6
+ 0x781A0005, // 0011 JMPF R6 #0018
+ 0x8C180B1A, // 0012 GETMET R6 R5 K26
+ 0x58200033, // 0013 LDCONST R8 K51
+ 0x7C180400, // 0014 CALL R6 2
+ 0x781A0000, // 0015 JMPF R6 #0017
+ 0x98080C04, // 0016 SETIDX R2 R6 R4
+ 0x70020006, // 0017 JMP #001F
+ 0xB81A0E00, // 0018 GETNGBL R6 K7
+ 0x601C0018, // 0019 GETGBL R7 G24
+ 0x58200074, // 001A LDCONST R8 K116
+ 0x5C240800, // 001B MOVE R9 R4
+ 0x7C1C0400, // 001C CALL R7 2
+ 0x58200009, // 001D LDCONST R8 K9
+ 0x7C180400, // 001E CALL R6 2
+ 0x7001FFE8, // 001F JMP #0009
+ 0x580C0057, // 0020 LDCONST R3 K87
+ 0xAC0C0200, // 0021 CATCH R3 1 0
+ 0xB0080000, // 0022 RAISE 2 R0 R0
+ 0x80040400, // 0023 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_Extension_manager_init, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_init,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040375, // 0001 GETMET R1 R1 K117
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: page_extensions_store
+********************************************************************/
+be_local_closure(class_Extension_manager_page_extensions_store, /* name */
+ be_nested_proto(
+ 33, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_page_extensions_store,
+ &be_const_str_solidified,
+ ( &(const binstruction[210]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0xA40A2A00, // 0001 IMPORT R2 K21
+ 0xA40EEC00, // 0002 IMPORT R3 K118
+ 0x8C100377, // 0003 GETMET R4 R1 K119
+ 0x541A00C7, // 0004 LDINT R6 200
+ 0x581C0078, // 0005 LDCONST R7 K120
+ 0x7C100600, // 0006 CALL R4 3
+ 0x4C100000, // 0007 LDNIL R4
+ 0xA8020004, // 0008 EXBLK 0 #000E
+ 0x8C140179, // 0009 GETMET R5 R0 K121
+ 0x7C140200, // 000A CALL R5 1
+ 0x5C100A00, // 000B MOVE R4 R5
+ 0xA8040001, // 000C EXBLK 1 1
+ 0x70020011, // 000D JMP #0020
+ 0xAC140002, // 000E CATCH R5 0 2
+ 0x7002000E, // 000F JMP #001F
+ 0x8C1C0321, // 0010 GETMET R7 R1 K33
+ 0x5824007A, // 0011 LDCONST R9 K122
+ 0x7C1C0400, // 0012 CALL R7 2
+ 0x8C1C0321, // 0013 GETMET R7 R1 K33
+ 0x60240018, // 0014 GETGBL R9 G24
+ 0x5828007B, // 0015 LDCONST R10 K123
+ 0x8C2C0328, // 0016 GETMET R11 R1 K40
+ 0x5C340C00, // 0017 MOVE R13 R6
+ 0x7C2C0400, // 0018 CALL R11 2
+ 0x7C240400, // 0019 CALL R9 2
+ 0x7C1C0400, // 001A CALL R7 2
+ 0x8C1C037C, // 001B GETMET R7 R1 K124
+ 0x7C1C0200, // 001C CALL R7 1
+ 0x80000E00, // 001D RET 0
+ 0x70020000, // 001E JMP #0020
+ 0xB0080000, // 001F RAISE 2 R0 R0
+ 0x8C14057D, // 0020 GETMET R5 R2 K125
+ 0x5C1C0800, // 0021 MOVE R7 R4
+ 0x5820007E, // 0022 LDCONST R8 K126
+ 0x7C140600, // 0023 CALL R5 3
+ 0x8C180321, // 0024 GETMET R6 R1 K33
+ 0x5820007F, // 0025 LDCONST R8 K127
+ 0x7C180400, // 0026 CALL R6 2
+ 0x8C180321, // 0027 GETMET R6 R1 K33
+ 0x60200018, // 0028 GETGBL R8 G24
+ 0x58240080, // 0029 LDCONST R9 K128
+ 0x5C280A00, // 002A MOVE R10 R5
+ 0x7C200400, // 002B CALL R8 2
+ 0x7C180400, // 002C CALL R6 2
+ 0x8C180321, // 002D GETMET R6 R1 K33
+ 0x58200081, // 002E LDCONST R8 K129
+ 0x7C180400, // 002F CALL R6 2
+ 0x8C180182, // 0030 GETMET R6 R0 K130
+ 0x7C180200, // 0031 CALL R6 1
+ 0x581C0017, // 0032 LDCONST R7 K23
+ 0x58200016, // 0033 LDCONST R8 K22
+ 0x6024000C, // 0034 GETGBL R9 G12
+ 0x5C280800, // 0035 MOVE R10 R4
+ 0x7C240200, // 0036 CALL R9 1
+ 0x14241009, // 0037 LT R9 R8 R9
+ 0x78260092, // 0038 JMPF R9 #00CC
+ 0x8C24051A, // 0039 GETMET R9 R2 K26
+ 0x5C2C0800, // 003A MOVE R11 R4
+ 0x58300083, // 003B LDCONST R12 K131
+ 0x5C341000, // 003C MOVE R13 R8
+ 0x7C240800, // 003D CALL R9 4
+ 0x14281316, // 003E LT R10 R9 K22
+ 0x782A0003, // 003F JMPF R10 #0044
+ 0x6028000C, // 0040 GETGBL R10 G12
+ 0x5C2C0800, // 0041 MOVE R11 R4
+ 0x7C280200, // 0042 CALL R10 1
+ 0x5C241400, // 0043 MOVE R9 R10
+ 0x40281009, // 0044 CONNECT R10 R8 R9
+ 0x9428080A, // 0045 GETIDX R10 R4 R10
+ 0x8C2C0184, // 0046 GETMET R11 R0 K132
+ 0x5C341400, // 0047 MOVE R13 R10
+ 0x7C2C0400, // 0048 CALL R11 2
+ 0x4C300000, // 0049 LDNIL R12
+ 0x2030160C, // 004A NE R12 R11 R12
+ 0x7832007C, // 004B JMPF R12 #00C9
+ 0x94301703, // 004C GETIDX R12 R11 K3
+ 0x8C340185, // 004D GETMET R13 R0 K133
+ 0x5C3C1800, // 004E MOVE R15 R12
+ 0x7C340400, // 004F CALL R13 2
+ 0x8C380328, // 0050 GETMET R14 R1 K40
+ 0x94401733, // 0051 GETIDX R16 R11 K51
+ 0x7C380400, // 0052 CALL R14 2
+ 0x943C1786, // 0053 GETIDX R15 R11 K134
+ 0x8C400587, // 0054 GETMET R16 R2 K135
+ 0x8C480328, // 0055 GETMET R18 R1 K40
+ 0x94501735, // 0056 GETIDX R20 R11 K53
+ 0x7C480400, // 0057 CALL R18 2
+ 0x584C0088, // 0058 LDCONST R19 K136
+ 0x58500089, // 0059 LDCONST R20 K137
+ 0x7C400800, // 005A CALL R16 4
+ 0x9444178A, // 005B GETIDX R17 R11 K138
+ 0x50480000, // 005C LDBOOL R18 0 0
+ 0x4C4C0000, // 005D LDNIL R19
+ 0x4C500000, // 005E LDNIL R20
+ 0x8C54014B, // 005F GETMET R21 R0 K75
+ 0x945C1786, // 0060 GETIDX R23 R11 K134
+ 0x7C540400, // 0061 CALL R21 2
+ 0x5C502A00, // 0062 MOVE R20 R21
+ 0x8C540328, // 0063 GETMET R21 R1 K40
+ 0x5C5C2800, // 0064 MOVE R23 R20
+ 0x7C540400, // 0065 CALL R21 2
+ 0x8C580D2B, // 0066 GETMET R22 R6 K43
+ 0x5C602800, // 0067 MOVE R24 R20
+ 0x7C580400, // 0068 CALL R22 2
+ 0x5C482C00, // 0069 MOVE R18 R22
+ 0x4C580000, // 006A LDNIL R22
+ 0x784A000F, // 006B JMPF R18 #007C
+ 0x945C0C14, // 006C GETIDX R23 R6 R20
+ 0x8C600328, // 006D GETMET R24 R1 K40
+ 0x5C682E00, // 006E MOVE R26 R23
+ 0x7C600400, // 006F CALL R24 2
+ 0x5C583000, // 0070 MOVE R22 R24
+ 0xB8620000, // 0071 GETNGBL R24 K0
+ 0x8C603129, // 0072 GETMET R24 R24 K41
+ 0x5C682E00, // 0073 MOVE R26 R23
+ 0x7C600400, // 0074 CALL R24 2
+ 0x60640009, // 0075 GETGBL R25 G9
+ 0x8C68311A, // 0076 GETMET R26 R24 K26
+ 0x58700003, // 0077 LDCONST R28 K3
+ 0x58740016, // 0078 LDCONST R29 K22
+ 0x7C680600, // 0079 CALL R26 3
+ 0x7C640200, // 007A CALL R25 1
+ 0x5C4C3200, // 007B MOVE R19 R25
+ 0x784A0001, // 007C JMPF R18 #007F
+ 0x145C260C, // 007D LT R23 R19 R12
+ 0x745E0000, // 007E JMPT R23 #0080
+ 0x505C0001, // 007F LDBOOL R23 0 1
+ 0x505C0200, // 0080 LDBOOL R23 1 0
+ 0x8C600321, // 0081 GETMET R24 R1 K33
+ 0x60680018, // 0082 GETGBL R26 G24
+ 0x586C008B, // 0083 LDCONST R27 K139
+ 0x5C700E00, // 0084 MOVE R28 R7
+ 0x5C741C00, // 0085 MOVE R29 R14
+ 0x8C780185, // 0086 GETMET R30 R0 K133
+ 0x5C801800, // 0087 MOVE R32 R12
+ 0x7C780400, // 0088 CALL R30 2
+ 0x7C680800, // 0089 CALL R26 4
+ 0x7C600400, // 008A CALL R24 2
+ 0x785E0003, // 008B JMPF R23 #0090
+ 0x8C600321, // 008C GETMET R24 R1 K33
+ 0x5868008C, // 008D LDCONST R26 K140
+ 0x7C600400, // 008E CALL R24 2
+ 0x70020003, // 008F JMP #0094
+ 0x784A0002, // 0090 JMPF R18 #0094
+ 0x8C600321, // 0091 GETMET R24 R1 K33
+ 0x5868008D, // 0092 LDCONST R26 K141
+ 0x7C600400, // 0093 CALL R24 2
+ 0x8C600321, // 0094 GETMET R24 R1 K33
+ 0x60680018, // 0095 GETGBL R26 G24
+ 0x586C008E, // 0096 LDCONST R27 K142
+ 0x5C700E00, // 0097 MOVE R28 R7
+ 0x5C740E00, // 0098 MOVE R29 R7
+ 0x5C782000, // 0099 MOVE R30 R16
+ 0x7C680800, // 009A CALL R26 4
+ 0x7C600400, // 009B CALL R24 2
+ 0x785E0008, // 009C JMPF R23 #00A6
+ 0x8C600321, // 009D GETMET R24 R1 K33
+ 0x60680018, // 009E GETGBL R26 G24
+ 0x586C008F, // 009F LDCONST R27 K143
+ 0x8C700185, // 00A0 GETMET R28 R0 K133
+ 0x5C782600, // 00A1 MOVE R30 R19
+ 0x7C700400, // 00A2 CALL R28 2
+ 0x5C741A00, // 00A3 MOVE R29 R13
+ 0x7C680600, // 00A4 CALL R26 3
+ 0x7C600400, // 00A5 CALL R24 2
+ 0x8C600321, // 00A6 GETMET R24 R1 K33
+ 0x58680090, // 00A7 LDCONST R26 K144
+ 0x7C600400, // 00A8 CALL R24 2
+ 0x784A0013, // 00A9 JMPF R18 #00BE
+ 0x785E0007, // 00AA JMPF R23 #00B3
+ 0x8C600321, // 00AB GETMET R24 R1 K33
+ 0x60680018, // 00AC GETGBL R26 G24
+ 0x586C0091, // 00AD LDCONST R27 K145
+ 0x5C702C00, // 00AE MOVE R28 R22
+ 0x5C742C00, // 00AF MOVE R29 R22
+ 0x7C680600, // 00B0 CALL R26 3
+ 0x7C600400, // 00B1 CALL R24 2
+ 0x70020002, // 00B2 JMP #00B6
+ 0x8C600321, // 00B3 GETMET R24 R1 K33
+ 0x58680092, // 00B4 LDCONST R26 K146
+ 0x7C600400, // 00B5 CALL R24 2
+ 0x8C600321, // 00B6 GETMET R24 R1 K33
+ 0x60680018, // 00B7 GETGBL R26 G24
+ 0x586C0093, // 00B8 LDCONST R27 K147
+ 0x5C702C00, // 00B9 MOVE R28 R22
+ 0x5C742C00, // 00BA MOVE R29 R22
+ 0x7C680600, // 00BB CALL R26 3
+ 0x7C600400, // 00BC CALL R24 2
+ 0x70020006, // 00BD JMP #00C5
+ 0x8C600321, // 00BE GETMET R24 R1 K33
+ 0x60680018, // 00BF GETGBL R26 G24
+ 0x586C0094, // 00C0 LDCONST R27 K148
+ 0x5C702A00, // 00C1 MOVE R28 R21
+ 0x5C741C00, // 00C2 MOVE R29 R14
+ 0x7C680600, // 00C3 CALL R26 3
+ 0x7C600400, // 00C4 CALL R24 2
+ 0x8C600321, // 00C5 GETMET R24 R1 K33
+ 0x58680043, // 00C6 LDCONST R26 K67
+ 0x7C600400, // 00C7 CALL R24 2
+ 0x001C0F17, // 00C8 ADD R7 R7 K23
+ 0x00301317, // 00C9 ADD R12 R9 K23
+ 0x5C201800, // 00CA MOVE R8 R12
+ 0x7001FF67, // 00CB JMP #0034
+ 0x8C240321, // 00CC GETMET R9 R1 K33
+ 0x582C0045, // 00CD LDCONST R11 K69
+ 0x7C240400, // 00CE CALL R9 2
+ 0x8C24037C, // 00CF GETMET R9 R1 K124
+ 0x7C240200, // 00D0 CALL R9 1
+ 0x80000000, // 00D1 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: version_string
+********************************************************************/
+be_local_closure(class_Extension_manager_version_string, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_version_string,
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x58040014, // 0000 LDCONST R1 K20
+ 0x60080018, // 0001 GETGBL R2 G24
+ 0x580C0095, // 0002 LDCONST R3 K149
+ 0x54120017, // 0003 LDINT R4 24
+ 0x3C100004, // 0004 SHR R4 R0 R4
+ 0x541600FE, // 0005 LDINT R5 255
+ 0x2C100805, // 0006 AND R4 R4 R5
+ 0x5416000F, // 0007 LDINT R5 16
+ 0x3C140005, // 0008 SHR R5 R0 R5
+ 0x541A00FE, // 0009 LDINT R6 255
+ 0x2C140A06, // 000A AND R5 R5 R6
+ 0x541A0007, // 000B LDINT R6 8
+ 0x3C180006, // 000C SHR R6 R0 R6
+ 0x541E00FE, // 000D LDINT R7 255
+ 0x2C180C07, // 000E AND R6 R6 R7
+ 0x541E00FE, // 000F LDINT R7 255
+ 0x2C1C0007, // 0010 AND R7 R0 R7
+ 0x7C080A00, // 0011 CALL R2 5
+ 0x80040400, // 0012 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: page_extensions_mgr_dispatcher
+********************************************************************/
+be_local_closure(class_Extension_manager_page_extensions_mgr_dispatcher, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_page_extensions_mgr_dispatcher,
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0x8C08035C, // 0001 GETMET R2 R1 K92
+ 0x7C080200, // 0002 CALL R2 1
+ 0x740A0001, // 0003 JMPT R2 #0006
+ 0x4C080000, // 0004 LDNIL R2
+ 0x80040400, // 0005 RET 1 R2
+ 0x8C080396, // 0006 GETMET R2 R1 K150
+ 0x58100097, // 0007 LDCONST R4 K151
+ 0x7C080400, // 0008 CALL R2 2
+ 0x780A0003, // 0009 JMPF R2 #000E
+ 0x8C080198, // 000A GETMET R2 R0 K152
+ 0x7C080200, // 000B CALL R2 1
+ 0x80040400, // 000C RET 1 R2
+ 0x70020002, // 000D JMP #0011
+ 0x8C080199, // 000E GETMET R2 R0 K153
+ 0x7C080200, // 000F CALL R2 1
+ 0x80040400, // 0010 RET 1 R2
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: manifest_decode
+********************************************************************/
+be_local_closure(class_Extension_manager_manifest_decode, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_manifest_decode,
+ &be_const_str_solidified,
+ ( &(const binstruction[58]) { /* code */
+ 0x58040014, // 0000 LDCONST R1 K20
+ 0xA40AEC00, // 0001 IMPORT R2 K118
+ 0x8C0C055F, // 0002 GETMET R3 R2 K95
+ 0x5C140000, // 0003 MOVE R5 R0
+ 0x7C0C0400, // 0004 CALL R3 2
+ 0x4C100000, // 0005 LDNIL R4
+ 0x1C100604, // 0006 EQ R4 R3 R4
+ 0x78120008, // 0007 JMPF R4 #0011
+ 0xB8120E00, // 0008 GETNGBL R4 K7
+ 0x60140018, // 0009 GETGBL R5 G24
+ 0x5818009A, // 000A LDCONST R6 K154
+ 0x5C1C0000, // 000B MOVE R7 R0
+ 0x7C140400, // 000C CALL R5 2
+ 0x58180009, // 000D LDCONST R6 K9
+ 0x7C100400, // 000E CALL R4 2
+ 0x4C100000, // 000F LDNIL R4
+ 0x80040800, // 0010 RET 1 R4
+ 0x8C10072B, // 0011 GETMET R4 R3 K43
+ 0x58180033, // 0012 LDCONST R6 K51
+ 0x7C100400, // 0013 CALL R4 2
+ 0x78120007, // 0014 JMPF R4 #001D
+ 0x8C10072B, // 0015 GETMET R4 R3 K43
+ 0x58180086, // 0016 LDCONST R6 K134
+ 0x7C100400, // 0017 CALL R4 2
+ 0x78120003, // 0018 JMPF R4 #001D
+ 0x8C10072B, // 0019 GETMET R4 R3 K43
+ 0x58180003, // 001A LDCONST R6 K3
+ 0x7C100400, // 001B CALL R4 2
+ 0x74120007, // 001C JMPT R4 #0025
+ 0xB8120E00, // 001D GETNGBL R4 K7
+ 0x60140018, // 001E GETGBL R5 G24
+ 0x5818009B, // 001F LDCONST R6 K155
+ 0x5C1C0600, // 0020 MOVE R7 R3
+ 0x7C140400, // 0021 CALL R5 2
+ 0x7C100200, // 0022 CALL R4 1
+ 0x4C100000, // 0023 LDNIL R4
+ 0x80040800, // 0024 RET 1 R4
+ 0x60100013, // 0025 GETGBL R4 G19
+ 0x7C100000, // 0026 CALL R4 0
+ 0x94140733, // 0027 GETIDX R5 R3 K51
+ 0x98126605, // 0028 SETIDX R4 K51 R5
+ 0x94140786, // 0029 GETIDX R5 R3 K134
+ 0x98130C05, // 002A SETIDX R4 K134 R5
+ 0x60140009, // 002B GETGBL R5 G9
+ 0x94180703, // 002C GETIDX R6 R3 K3
+ 0x7C140200, // 002D CALL R5 1
+ 0x98120605, // 002E SETIDX R4 K3 R5
+ 0x8C14071A, // 002F GETMET R5 R3 K26
+ 0x581C0035, // 0030 LDCONST R7 K53
+ 0x5820009C, // 0031 LDCONST R8 K156
+ 0x7C140600, // 0032 CALL R5 3
+ 0x98126A05, // 0033 SETIDX R4 K53 R5
+ 0x8C14071A, // 0034 GETMET R5 R3 K26
+ 0x581C008A, // 0035 LDCONST R7 K138
+ 0x5820002D, // 0036 LDCONST R8 K45
+ 0x7C140600, // 0037 CALL R5 3
+ 0x98131405, // 0038 SETIDX R4 K138 R5
+ 0x80040800, // 0039 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Extension_manager
+********************************************************************/
+be_local_class(Extension_manager,
+ 0,
+ NULL,
+ be_nested_map(19,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key(EXT_FOLDER, -1), be_nested_str(_X2F_X2Eextensions_X2F) },
+ { be_const_key(EXT_REPO_FOLDER, -1), be_nested_str(tapp_X2F) },
+ { be_const_key(tapp_name, 6), be_const_static_closure(class_Extension_manager_tapp_name_closure) },
+ { be_const_key(page_extensions_mgr, -1), be_const_closure(class_Extension_manager_page_extensions_mgr_closure) },
+ { be_const_key(install_from_store, -1), be_const_closure(class_Extension_manager_install_from_store_closure) },
+ { be_const_key(list_extensions, -1), be_const_static_closure(class_Extension_manager_list_extensions_closure) },
+ { be_const_key(version_string, -1), be_const_static_closure(class_Extension_manager_version_string_closure) },
+ { be_const_key(load_manifest, 1), be_const_closure(class_Extension_manager_load_manifest_closure) },
+ { be_const_key(web_add_button, 5), be_const_closure(class_Extension_manager_web_add_button_closure) },
+ { be_const_key(page_extensions_store, 16), be_const_closure(class_Extension_manager_page_extensions_store_closure) },
+ { be_const_key(web_add_handler, -1), be_const_closure(class_Extension_manager_web_add_handler_closure) },
+ { be_const_key(EXT_REPO, -1), be_nested_str(https_X3A_X2F_X2Fota_X2Etasmota_X2Ecom_X2Fextensions_X2F) },
+ { be_const_key(page_extensions_ctl, 11), be_const_closure(class_Extension_manager_page_extensions_ctl_closure) },
+ { be_const_key(init, -1), be_const_closure(class_Extension_manager_init_closure) },
+ { be_const_key(EXT_REPO_MANIFEST, -1), be_nested_str(extensions_X2Ejsonl) },
+ { be_const_key(list_installed_ext, 9), be_const_static_closure(class_Extension_manager_list_installed_ext_closure) },
+ { be_const_key(list_extensions_in_fs, -1), be_const_static_closure(class_Extension_manager_list_extensions_in_fs_closure) },
+ { be_const_key(page_extensions_mgr_dispatcher, -1), be_const_closure(class_Extension_manager_page_extensions_mgr_dispatcher_closure) },
+ { be_const_key(manifest_decode, -1), be_const_static_closure(class_Extension_manager_manifest_decode_closure) },
+ })),
+ (bstring*) &be_const_str_Extension_manager
+);
+
+/********************************************************************
+** Solidified function: _anonymous_
+********************************************************************/
+be_local_closure(_anonymous_, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(Extension_manager),
+ }),
+ &be_const_str__anonymous_,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified module: extension_manager
+********************************************************************/
+be_local_module(extension_manager,
+ "extension_manager",
+ be_nested_map(2,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key(Extension_manager, -1), be_const_class(be_class_Extension_manager) },
+ { be_const_key(init, -1), be_const_closure(_anonymous__closure) },
+ }))
+);
+BE_EXPORT_VARIABLE be_define_const_native_module(extension_manager);
+/********************************************************************/
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h
index 52abc7b0e..31ce38310 100644
--- a/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h
+++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h
@@ -4,186 +4,202 @@
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Tasmota;
-// compact class 'Tasmota' ktab size: 167, total: 321 (saved 1232 bytes)
-static const bvalue be_ktab_class_Tasmota[167] = {
- /* K0 */ be_nested_str(_crons),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str(size),
- /* K3 */ be_nested_str(id),
- /* K4 */ be_nested_str(trig),
- /* K5 */ be_const_int(1),
- /* K6 */ be_const_class(be_class_Tasmota),
- /* K7 */ be_nested_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29),
- /* K8 */ be_nested_str(light),
- /* K9 */ be_nested_str(get),
- /* K10 */ be_nested_str(tasmota),
- /* K11 */ be_nested_str(wifi),
- /* K12 */ be_nested_str(up),
- /* K13 */ be_nested_str(eth),
- /* K14 */ be_nested_str(match),
- /* K15 */ be_nested_str(trigger),
- /* K16 */ be_nested_str(_defer),
- /* K17 */ be_nested_str(push),
- /* K18 */ be_nested_str(global),
- /* K19 */ be_nested_str(deferred_ready),
- /* K20 */ be_nested_str(_rules),
- /* K21 */ be_nested_str(rule),
- /* K22 */ be_nested_str(remove),
- /* K23 */ be_nested_str(scale_uint),
- /* K24 */ be_const_int(2),
- /* K25 */ be_const_int(3),
- /* K26 */ be_nested_str(instance),
- /* K27 */ be_nested_str(value_error),
- /* K28 */ be_nested_str(instance_X20required),
- /* K29 */ be_nested_str(_drivers),
- /* K30 */ be_nested_str(find),
- /* K31 */ be_nested_str(cmd_res),
- /* K32 */ be_nested_str(json),
- /* K33 */ be_nested_str(load),
- /* K34 */ be_nested_str(log),
- /* K35 */ be_nested_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20),
- /* K36 */ be_nested_str(try_rule),
- /* K37 */ be_nested_str(f),
- /* K38 */ be_nested_str(o),
- /* K39 */ be_nested_str(check_not_method),
- /* K40 */ be_nested_str(_timers),
- /* K41 */ be_nested_str(Trigger),
- /* K42 */ be_nested_str(millis),
- /* K43 */ be_nested_str(ctypes_bytes_dyn),
- /* K44 */ be_nested_str(_global_addr),
- /* K45 */ be_nested_str(_global_def),
- /* K46 */ be_nested_str(introspect),
- /* K47 */ be_nested_str(_settings_ptr),
- /* K48 */ be_nested_str(settings),
- /* K49 */ be_nested_str(toptr),
- /* K50 */ be_nested_str(_settings_def),
- /* K51 */ be_nested_str(wd),
- /* K52 */ be_nested_str(),
- /* K53 */ be_nested_str(_debug_present),
- /* K54 */ be_nested_str(contains),
- /* K55 */ be_nested_str(debug),
- /* K56 */ be_nested_str(add_cmd),
- /* K57 */ be_nested_str(UrlFetch),
- /* K58 */ be_nested_str(pop),
- /* K59 */ be_nested_str(string),
- /* K60 */ be_nested_str(endswith),
- /* K61 */ be_nested_str(_X2Ebe),
- /* K62 */ be_nested_str(BRY_X3A_X20file_X20_X27_X25s_X27_X20does_X20not_X20have_X20_X27_X2Ebe_X27_X20extension),
- /* K63 */ be_nested_str(_X23),
- /* K64 */ be_nested_str(BRY_X3A_X20cannot_X20compile_X20file_X20in_X20read_X2Donly_X20archive),
- /* K65 */ be_nested_str(file),
- /* K66 */ be_nested_str(BRY_X3A_X20empty_X20compiled_X20file),
- /* K67 */ be_nested_str(BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X20_X2D_X20_X25s_X29),
- /* K68 */ be_nested_str(c),
- /* K69 */ be_nested_str(save),
- /* K70 */ be_nested_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29),
- /* K71 */ be_nested_str(_ccmd),
- /* K72 */ be_nested_str(function),
- /* K73 */ be_nested_str(the_X20second_X20argument_X20is_X20not_X20a_X20function),
- /* K74 */ be_nested_str(run_deferred),
- /* K75 */ be_nested_str(time_reached),
- /* K76 */ be_nested_str(_fl),
- /* K77 */ be_nested_str(toupper),
- /* K78 */ be_nested_str(keys),
- /* K79 */ be_nested_str(_X3F),
- /* K80 */ be_nested_str(stop_iteration),
- /* K81 */ be_nested_str(type_error),
- /* K82 */ be_nested_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function),
- /* K83 */ be_nested_str(ismethod),
- /* K84 */ be_nested_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27),
- /* K85 */ be_nested_str(is_network_up),
- /* K86 */ be_nested_str(_wnu),
- /* K87 */ be_nested_str(add_rule),
- /* K88 */ be_nested_str(find_key_i),
- /* K89 */ be_nested_str(resolvecmnd),
- /* K90 */ be_nested_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29),
- /* K91 */ be_nested_str(set),
- /* K92 */ be_nested_str(ccronexpr),
- /* K93 */ be_nested_str(now),
- /* K94 */ be_nested_str(next),
- /* K95 */ be_nested_str(maxlog_level),
- /* K96 */ be_nested_str(_cmd),
- /* K97 */ be_nested_str(time_dump),
- /* K98 */ be_nested_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d),
- /* K99 */ be_nested_str(year),
- /* K100 */ be_nested_str(month),
- /* K101 */ be_nested_str(day),
- /* K102 */ be_nested_str(hour),
- /* K103 */ be_nested_str(min),
- /* K104 */ be_nested_str(sec),
- /* K105 */ be_nested_str(every_50ms),
- /* K106 */ be_nested_str(run_network_up),
- /* K107 */ be_nested_str(run_timers),
- /* K108 */ be_nested_str(every_250ms),
- /* K109 */ be_nested_str(run_cron),
- /* K110 */ be_nested_str(mqtt_data),
- /* K111 */ be_nested_str(cmd),
- /* K112 */ be_nested_str(exec_cmd),
- /* K113 */ be_nested_str(tele),
- /* K114 */ be_nested_str(exec_tele),
- /* K115 */ be_nested_str(exec_rules),
- /* K116 */ be_nested_str(gc),
- /* K117 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s),
- /* K118 */ be_nested_str(traceback),
- /* K119 */ be_nested_str(save_before_restart),
- /* K120 */ be_nested_str(persist),
- /* K121 */ be_nested_str(i2c_enabled),
- /* K122 */ be_nested_str(wire1),
- /* K123 */ be_nested_str(enabled),
- /* K124 */ be_nested_str(detect),
- /* K125 */ be_nested_str(wire2),
- /* K126 */ be_nested_str(Tele),
- /* K127 */ be_nested_str(remove_rule),
- /* K128 */ be_nested_str(Rule_Matcher),
- /* K129 */ be_nested_str(parse),
- /* K130 */ be_nested_str(argument_X20must_X20be_X20a_X20function),
- /* K131 */ be_nested_str(fast_loop_enabled),
- /* K132 */ be_nested_str(collect),
- /* K133 */ be_nested_str(allocated),
- /* K134 */ be_nested_str(_find_op),
- /* K135 */ be_const_int(2147483647),
- /* K136 */ be_nested_str(path),
- /* K137 */ be_nested_str(startswith),
- /* K138 */ be_nested_str(_X2F),
- /* K139 */ be_nested_str(tapp),
- /* K140 */ be_nested_str(_X23autoexec),
- /* K141 */ be_nested_str(_X2E),
- /* K142 */ be_nested_str(_X2Ebec),
- /* K143 */ be_nested_str(BRY_X3A_X20file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20nor_X20_X27_X2Ebec_X27),
- /* K144 */ be_nested_str(exists),
- /* K145 */ be_nested_str(BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27),
- /* K146 */ be_nested_str(BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25s_X29),
- /* K147 */ be_nested_str(split),
- /* K148 */ be_nested_str(index_X2Ehtml),
- /* K149 */ be_nested_str(webclient),
- /* K150 */ be_nested_str(set_follow_redirects),
- /* K151 */ be_nested_str(begin),
- /* K152 */ be_nested_str(GET),
- /* K153 */ be_nested_str(status_X3A_X20),
- /* K154 */ be_nested_str(connection_error),
- /* K155 */ be_nested_str(write_file),
- /* K156 */ be_nested_str(close),
- /* K157 */ be_nested_str(BRY_X3A_X20Fetched_X20),
- /* K158 */ be_nested_str(cb),
- /* K159 */ be_nested_str(gen_cb),
- /* K160 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20run_network_up_X20_X27_X25s_X27_X20_X2D_X20_X25s),
- /* K161 */ be_nested_str(http),
- /* K162 */ be_nested_str(resp_cmnd_str),
- /* K163 */ be_nested_str(URL_X20must_X20start_X20with_X20_X27http_X28s_X29_X27),
- /* K164 */ be_nested_str(urlfetch),
- /* K165 */ be_nested_str(resp_cmnd_failed),
- /* K166 */ be_nested_str(resp_cmnd_done),
+// compact class 'Tasmota' ktab size: 183, total: 371 (saved 1504 bytes)
+static const bvalue be_ktab_class_Tasmota[183] = {
+ /* K0 */ be_nested_str(json),
+ /* K1 */ be_nested_str(string),
+ /* K2 */ be_nested_str(tasmota),
+ /* K3 */ be_nested_str(wd),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str(_X2F),
+ /* K6 */ be_nested_str(_X23),
+ /* K7 */ be_nested_str(),
+ /* K8 */ be_nested_str(manifest_X2Ejson),
+ /* K9 */ be_nested_str(read),
+ /* K10 */ be_nested_str(close),
+ /* K11 */ be_nested_str(load),
+ /* K12 */ be_nested_str(find),
+ /* K13 */ be_nested_str(name),
+ /* K14 */ be_nested_str(description),
+ /* K15 */ be_nested_str(version),
+ /* K16 */ be_nested_str(min_tasmota),
+ /* K17 */ be_nested_str(autorun),
+ /* K18 */ be_nested_str(endswith),
+ /* K19 */ be_nested_str(_X2Etapp),
+ /* K20 */ be_nested_str(log),
+ /* K21 */ be_nested_str(BRY_X3A_X20error_X20_X25s_X20_X25s_X20when_X20reading_X20_X27manifest_X2Ejson_X27_X20in_X20_X27_X25s_X27),
+ /* K22 */ be_nested_str(_ccmd),
+ /* K23 */ be_nested_str(find_key_i),
+ /* K24 */ be_nested_str(resolvecmnd),
+ /* K25 */ be_const_class(be_class_Tasmota),
+ /* K26 */ be_nested_str(check_not_method),
+ /* K27 */ be_nested_str(is_network_up),
+ /* K28 */ be_nested_str(_wnu),
+ /* K29 */ be_nested_str(push),
+ /* K30 */ be_nested_str(_X2Ebe),
+ /* K31 */ be_nested_str(BRY_X3A_X20file_X20_X27_X25s_X27_X20does_X20not_X20have_X20_X27_X2Ebe_X27_X20extension),
+ /* K32 */ be_nested_str(BRY_X3A_X20cannot_X20compile_X20file_X20in_X20read_X2Donly_X20archive),
+ /* K33 */ be_nested_str(file),
+ /* K34 */ be_nested_str(BRY_X3A_X20empty_X20compiled_X20file),
+ /* K35 */ be_nested_str(BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X20_X2D_X20_X25s_X29),
+ /* K36 */ be_nested_str(c),
+ /* K37 */ be_nested_str(save),
+ /* K38 */ be_nested_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29),
+ /* K39 */ be_nested_str(_fl),
+ /* K40 */ be_nested_str(function),
+ /* K41 */ be_nested_str(value_error),
+ /* K42 */ be_nested_str(argument_X20must_X20be_X20a_X20function),
+ /* K43 */ be_nested_str(global),
+ /* K44 */ be_nested_str(fast_loop_enabled),
+ /* K45 */ be_const_int(1),
+ /* K46 */ be_nested_str(_timers),
+ /* K47 */ be_nested_str(size),
+ /* K48 */ be_nested_str(id),
+ /* K49 */ be_nested_str(remove),
+ /* K50 */ be_nested_str(wifi),
+ /* K51 */ be_nested_str(up),
+ /* K52 */ be_nested_str(eth),
+ /* K53 */ be_nested_str(toupper),
+ /* K54 */ be_nested_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29),
+ /* K55 */ be_nested_str(light),
+ /* K56 */ be_nested_str(set),
+ /* K57 */ be_nested_str(_crons),
+ /* K58 */ be_nested_str(ccronexpr),
+ /* K59 */ be_nested_str(now),
+ /* K60 */ be_nested_str(trig),
+ /* K61 */ be_nested_str(next),
+ /* K62 */ be_nested_str(time_reached),
+ /* K63 */ be_nested_str(f),
+ /* K64 */ be_nested_str(cmd_res),
+ /* K65 */ be_nested_str(maxlog_level),
+ /* K66 */ be_const_int(2),
+ /* K67 */ be_nested_str(_cmd),
+ /* K68 */ be_nested_str(keys),
+ /* K69 */ be_nested_str(_X3F),
+ /* K70 */ be_nested_str(stop_iteration),
+ /* K71 */ be_nested_str(_rules),
+ /* K72 */ be_nested_str(rule),
+ /* K73 */ be_nested_str(_drivers),
+ /* K74 */ be_nested_str(pop),
+ /* K75 */ be_nested_str(_ext),
+ /* K76 */ be_nested_str(remove_by_value),
+ /* K77 */ be_nested_str(the_X20second_X20argument_X20is_X20not_X20a_X20function),
+ /* K78 */ be_nested_str(Trigger),
+ /* K79 */ be_nested_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20),
+ /* K80 */ be_const_int(3),
+ /* K81 */ be_nested_str(Tele),
+ /* K82 */ be_nested_str(try_rule),
+ /* K83 */ be_nested_str(cb),
+ /* K84 */ be_nested_str(gen_cb),
+ /* K85 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20run_network_up_X20_X27_X25s_X27_X20_X2D_X20_X25s),
+ /* K86 */ be_nested_str(run_deferred),
+ /* K87 */ be_nested_str(instance),
+ /* K88 */ be_nested_str(instance_X20and_X20name_X20required),
+ /* K89 */ be_nested_str(sortedmap),
+ /* K90 */ be_nested_str(contains),
+ /* K91 */ be_nested_str(BRY_X3A_X20Extension_X20_X27_X25s_X27_X20already_X20registered),
+ /* K92 */ be_nested_str(i2c_enabled),
+ /* K93 */ be_nested_str(wire1),
+ /* K94 */ be_nested_str(enabled),
+ /* K95 */ be_nested_str(detect),
+ /* K96 */ be_nested_str(wire2),
+ /* K97 */ be_nested_str(split),
+ /* K98 */ be_nested_str(index_X2Ehtml),
+ /* K99 */ be_nested_str(webclient),
+ /* K100 */ be_nested_str(set_follow_redirects),
+ /* K101 */ be_nested_str(begin),
+ /* K102 */ be_nested_str(GET),
+ /* K103 */ be_nested_str(status_X3A_X20),
+ /* K104 */ be_nested_str(connection_error),
+ /* K105 */ be_nested_str(write_file),
+ /* K106 */ be_nested_str(BRY_X3A_X20Fetched_X20),
+ /* K107 */ be_nested_str(_defer),
+ /* K108 */ be_nested_str(deferred_ready),
+ /* K109 */ be_nested_str(ctypes_bytes_dyn),
+ /* K110 */ be_nested_str(_global_addr),
+ /* K111 */ be_nested_str(_global_def),
+ /* K112 */ be_nested_str(introspect),
+ /* K113 */ be_nested_str(_settings_ptr),
+ /* K114 */ be_nested_str(get),
+ /* K115 */ be_nested_str(settings),
+ /* K116 */ be_nested_str(toptr),
+ /* K117 */ be_nested_str(_settings_def),
+ /* K118 */ be_nested_str(_debug_present),
+ /* K119 */ be_nested_str(debug),
+ /* K120 */ be_nested_str(add_cmd),
+ /* K121 */ be_nested_str(UrlFetch),
+ /* K122 */ be_nested_str(unload),
+ /* K123 */ be_nested_str(remove_driver),
+ /* K124 */ be_nested_str(gc),
+ /* K125 */ be_nested_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29),
+ /* K126 */ be_nested_str(path),
+ /* K127 */ be_nested_str(startswith),
+ /* K128 */ be_nested_str(_X2Etapp_),
+ /* K129 */ be_nested_str(_X23autoexec),
+ /* K130 */ be_const_int(2147483647),
+ /* K131 */ be_nested_str(_X2E),
+ /* K132 */ be_nested_str(_X2Ebec),
+ /* K133 */ be_nested_str(BRY_X3A_X20file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20nor_X20_X27_X2Ebec_X27),
+ /* K134 */ be_nested_str(exists),
+ /* K135 */ be_nested_str(BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27),
+ /* K136 */ be_nested_str(BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25s_X29),
+ /* K137 */ be_nested_str(remove_rule),
+ /* K138 */ be_nested_str(Rule_Matcher),
+ /* K139 */ be_nested_str(parse),
+ /* K140 */ be_nested_str(type_error),
+ /* K141 */ be_nested_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function),
+ /* K142 */ be_nested_str(ismethod),
+ /* K143 */ be_nested_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27),
+ /* K144 */ be_nested_str(add_rule),
+ /* K145 */ be_nested_str(o),
+ /* K146 */ be_nested_str(millis),
+ /* K147 */ be_nested_str(collect),
+ /* K148 */ be_nested_str(allocated),
+ /* K149 */ be_nested_str(_find_op),
+ /* K150 */ be_nested_str(http),
+ /* K151 */ be_nested_str(resp_cmnd_str),
+ /* K152 */ be_nested_str(URL_X20must_X20start_X20with_X20_X27http_X28s_X29_X27),
+ /* K153 */ be_nested_str(urlfetch),
+ /* K154 */ be_nested_str(resp_cmnd_failed),
+ /* K155 */ be_nested_str(resp_cmnd_done),
+ /* K156 */ be_nested_str(scale_uint),
+ /* K157 */ be_nested_str(time_dump),
+ /* K158 */ be_nested_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d),
+ /* K159 */ be_nested_str(year),
+ /* K160 */ be_nested_str(month),
+ /* K161 */ be_nested_str(day),
+ /* K162 */ be_nested_str(hour),
+ /* K163 */ be_nested_str(min),
+ /* K164 */ be_nested_str(sec),
+ /* K165 */ be_nested_str(match),
+ /* K166 */ be_nested_str(trigger),
+ /* K167 */ be_nested_str(every_50ms),
+ /* K168 */ be_nested_str(run_network_up),
+ /* K169 */ be_nested_str(run_timers),
+ /* K170 */ be_nested_str(every_250ms),
+ /* K171 */ be_nested_str(run_cron),
+ /* K172 */ be_nested_str(mqtt_data),
+ /* K173 */ be_nested_str(cmd),
+ /* K174 */ be_nested_str(exec_cmd),
+ /* K175 */ be_nested_str(tele),
+ /* K176 */ be_nested_str(exec_tele),
+ /* K177 */ be_nested_str(exec_rules),
+ /* K178 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s),
+ /* K179 */ be_nested_str(traceback),
+ /* K180 */ be_nested_str(save_before_restart),
+ /* K181 */ be_nested_str(persist),
+ /* K182 */ be_nested_str(instance_X20required),
};
extern const bclass be_class_Tasmota;
/********************************************************************
-** Solidified function: next_cron
+** Solidified function: read_extension_manifest
********************************************************************/
-be_local_closure(class_Tasmota_next_cron, /* name */
+be_local_closure(class_Tasmota_read_extension_manifest, /* name */
be_nested_proto(
- 6, /* nstack */
+ 15, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -192,26 +208,159 @@ be_local_closure(class_Tasmota_next_cron, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_next_cron,
+ &be_const_str_read_extension_manifest,
&be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x780A000D, // 0001 JMPF R2 #0010
- 0x580C0001, // 0002 LDCONST R3 K1
- 0x8C100502, // 0003 GETMET R4 R2 K2
- 0x7C100200, // 0004 CALL R4 1
- 0x14100604, // 0005 LT R4 R3 R4
- 0x78120008, // 0006 JMPF R4 #0010
- 0x94100403, // 0007 GETIDX R4 R2 R3
- 0x88100903, // 0008 GETMBR R4 R4 K3
- 0x1C100801, // 0009 EQ R4 R4 R1
- 0x78120002, // 000A JMPF R4 #000E
- 0x94100403, // 000B GETIDX R4 R2 R3
- 0x88100904, // 000C GETMBR R4 R4 K4
- 0x80040800, // 000D RET 1 R4
- 0x000C0705, // 000E ADD R3 R3 K5
- 0x7001FFF2, // 000F JMP #0003
- 0x80000000, // 0010 RET 0
+ ( &(const binstruction[100]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0xA802004C, // 0002 EXBLK 0 #0050
+ 0xA4120000, // 0003 IMPORT R4 K0
+ 0xA4160200, // 0004 IMPORT R5 K1
+ 0x4C180000, // 0005 LDNIL R6
+ 0x1C180606, // 0006 EQ R6 R3 R6
+ 0x781A0001, // 0007 JMPF R6 #000A
+ 0xB81A0400, // 0008 GETNGBL R6 K2
+ 0x880C0D03, // 0009 GETMBR R3 R6 K3
+ 0x6018000C, // 000A GETGBL R6 G12
+ 0x5C1C0600, // 000B MOVE R7 R3
+ 0x7C180200, // 000C CALL R6 1
+ 0x24180D04, // 000D GT R6 R6 K4
+ 0x781A0009, // 000E JMPF R6 #0019
+ 0x5419FFFE, // 000F LDINT R6 -1
+ 0x94180606, // 0010 GETIDX R6 R3 R6
+ 0x20180D05, // 0011 NE R6 R6 K5
+ 0x781A0005, // 0012 JMPF R6 #0019
+ 0x5419FFFE, // 0013 LDINT R6 -1
+ 0x94180606, // 0014 GETIDX R6 R3 R6
+ 0x20180D06, // 0015 NE R6 R6 K6
+ 0x781A0001, // 0016 JMPF R6 #0019
+ 0x58180006, // 0017 LDCONST R6 K6
+ 0x70020000, // 0018 JMP #001A
+ 0x58180007, // 0019 LDCONST R6 K7
+ 0x601C0011, // 001A GETGBL R7 G17
+ 0x00200606, // 001B ADD R8 R3 R6
+ 0x00201108, // 001C ADD R8 R8 K8
+ 0x7C1C0200, // 001D CALL R7 1
+ 0x5C080E00, // 001E MOVE R2 R7
+ 0x8C1C0509, // 001F GETMET R7 R2 K9
+ 0x7C1C0200, // 0020 CALL R7 1
+ 0x8C20050A, // 0021 GETMET R8 R2 K10
+ 0x7C200200, // 0022 CALL R8 1
+ 0x8C20090B, // 0023 GETMET R8 R4 K11
+ 0x5C280E00, // 0024 MOVE R10 R7
+ 0x7C200400, // 0025 CALL R8 2
+ 0x8C24110C, // 0026 GETMET R9 R8 K12
+ 0x582C000D, // 0027 LDCONST R11 K13
+ 0x7C240400, // 0028 CALL R9 2
+ 0x78260020, // 0029 JMPF R9 #004B
+ 0x60280008, // 002A GETGBL R10 G8
+ 0x942C110D, // 002B GETIDX R11 R8 K13
+ 0x7C280200, // 002C CALL R10 1
+ 0x98221A0A, // 002D SETIDX R8 K13 R10
+ 0x60280008, // 002E GETGBL R10 G8
+ 0x8C2C110C, // 002F GETMET R11 R8 K12
+ 0x5834000E, // 0030 LDCONST R13 K14
+ 0x58380007, // 0031 LDCONST R14 K7
+ 0x7C2C0600, // 0032 CALL R11 3
+ 0x7C280200, // 0033 CALL R10 1
+ 0x98221C0A, // 0034 SETIDX R8 K14 R10
+ 0x60280009, // 0035 GETGBL R10 G9
+ 0x8C2C110C, // 0036 GETMET R11 R8 K12
+ 0x5834000F, // 0037 LDCONST R13 K15
+ 0x58380004, // 0038 LDCONST R14 K4
+ 0x7C2C0600, // 0039 CALL R11 3
+ 0x7C280200, // 003A CALL R10 1
+ 0x98221E0A, // 003B SETIDX R8 K15 R10
+ 0x60280009, // 003C GETGBL R10 G9
+ 0x8C2C110C, // 003D GETMET R11 R8 K12
+ 0x58340010, // 003E LDCONST R13 K16
+ 0x58380004, // 003F LDCONST R14 K4
+ 0x7C2C0600, // 0040 CALL R11 3
+ 0x7C280200, // 0041 CALL R10 1
+ 0x9822200A, // 0042 SETIDX R8 K16 R10
+ 0x8C280B12, // 0043 GETMET R10 R5 K18
+ 0x5C300600, // 0044 MOVE R12 R3
+ 0x58340013, // 0045 LDCONST R13 K19
+ 0x7C280600, // 0046 CALL R10 3
+ 0x9822220A, // 0047 SETIDX R8 K17 R10
+ 0xA8040001, // 0048 EXBLK 1 1
+ 0x80041000, // 0049 RET 1 R8
+ 0x70020002, // 004A JMP #004E
+ 0x4C280000, // 004B LDNIL R10
+ 0xA8040001, // 004C EXBLK 1 1
+ 0x80041400, // 004D RET 1 R10
+ 0xA8040001, // 004E EXBLK 1 1
+ 0x70020012, // 004F JMP #0063
+ 0xAC100002, // 0050 CATCH R4 0 2
+ 0x7002000F, // 0051 JMP #0062
+ 0xB81A2800, // 0052 GETNGBL R6 K20
+ 0x601C0018, // 0053 GETGBL R7 G24
+ 0x58200015, // 0054 LDCONST R8 K21
+ 0x5C240800, // 0055 MOVE R9 R4
+ 0x5C280A00, // 0056 MOVE R10 R5
+ 0x5C2C0600, // 0057 MOVE R11 R3
+ 0x7C1C0800, // 0058 CALL R7 4
+ 0x7C180200, // 0059 CALL R6 1
+ 0x4C180000, // 005A LDNIL R6
+ 0x20180406, // 005B NE R6 R2 R6
+ 0x781A0001, // 005C JMPF R6 #005F
+ 0x8C18050A, // 005D GETMET R6 R2 K10
+ 0x7C180200, // 005E CALL R6 1
+ 0x4C180000, // 005F LDNIL R6
+ 0x80040C00, // 0060 RET 1 R6
+ 0x70020000, // 0061 JMP #0063
+ 0xB0080000, // 0062 RAISE 2 R0 R0
+ 0x80000000, // 0063 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: exec_cmd
+********************************************************************/
+be_local_closure(class_Tasmota_exec_cmd, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_exec_cmd,
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x88100116, // 0000 GETMBR R4 R0 K22
+ 0x78120016, // 0001 JMPF R4 #0019
+ 0x8C100117, // 0002 GETMET R4 R0 K23
+ 0x88180116, // 0003 GETMBR R6 R0 K22
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x7C100600, // 0005 CALL R4 3
+ 0x4C140000, // 0006 LDNIL R5
+ 0x20140805, // 0007 NE R5 R4 R5
+ 0x7816000F, // 0008 JMPF R5 #0019
+ 0xA4160000, // 0009 IMPORT R5 K0
+ 0x8C180B0B, // 000A GETMET R6 R5 K11
+ 0x5C200600, // 000B MOVE R8 R3
+ 0x7C180400, // 000C CALL R6 2
+ 0x8C1C0118, // 000D GETMET R7 R0 K24
+ 0x5C240800, // 000E MOVE R9 R4
+ 0x7C1C0400, // 000F CALL R7 2
+ 0x881C0116, // 0010 GETMBR R7 R0 K22
+ 0x941C0E04, // 0011 GETIDX R7 R7 R4
+ 0x5C200800, // 0012 MOVE R8 R4
+ 0x5C240400, // 0013 MOVE R9 R2
+ 0x5C280600, // 0014 MOVE R10 R3
+ 0x5C2C0C00, // 0015 MOVE R11 R6
+ 0x7C1C0800, // 0016 CALL R7 4
+ 0x501C0200, // 0017 LDBOOL R7 1 0
+ 0x80040E00, // 0018 RET 1 R7
+ 0x50100000, // 0019 LDBOOL R4 0 0
+ 0x80040800, // 001A RET 1 R4
})
)
);
@@ -235,7 +384,7 @@ be_local_closure(class_Tasmota_int, /* name */
&be_const_str_int,
&be_const_str_solidified,
( &(const binstruction[46]) { /* code */
- 0x580C0006, // 0000 LDCONST R3 K6
+ 0x580C0019, // 0000 LDCONST R3 K25
0x60100009, // 0001 GETGBL R4 G9
0x5C140000, // 0002 MOVE R5 R0
0x7C100200, // 0003 CALL R4 1
@@ -288,11 +437,11 @@ be_local_closure(class_Tasmota_int, /* name */
/********************************************************************
-** Solidified function: get_light
+** Solidified function: when_network_up
********************************************************************/
-be_local_closure(class_Tasmota_get_light, /* name */
+be_local_closure(class_Tasmota_when_network_up, /* name */
be_nested_proto(
- 6, /* nstack */
+ 5, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -301,25 +450,227 @@ be_local_closure(class_Tasmota_get_light, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_get_light,
+ &be_const_str_when_network_up,
&be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
- 0x60080001, // 0000 GETGBL R2 G1
- 0x580C0007, // 0001 LDCONST R3 K7
- 0x7C080200, // 0002 CALL R2 1
- 0xA40A1000, // 0003 IMPORT R2 K8
+ ( &(const binstruction[23]) { /* code */
+ 0x8C08011A, // 0000 GETMET R2 R0 K26
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x8C08011B, // 0003 GETMET R2 R0 K27
+ 0x7C080200, // 0004 CALL R2 1
+ 0x780A0002, // 0005 JMPF R2 #0009
+ 0x5C080200, // 0006 MOVE R2 R1
+ 0x7C080000, // 0007 CALL R2 0
+ 0x7002000C, // 0008 JMP #0016
+ 0x8808011C, // 0009 GETMBR R2 R0 K28
+ 0x4C0C0000, // 000A LDNIL R3
+ 0x1C080403, // 000B EQ R2 R2 R3
+ 0x780A0004, // 000C JMPF R2 #0012
+ 0x60080012, // 000D GETGBL R2 G18
+ 0x7C080000, // 000E CALL R2 0
+ 0x400C0401, // 000F CONNECT R3 R2 R1
+ 0x90023802, // 0010 SETMBR R0 K28 R2
+ 0x70020003, // 0011 JMP #0016
+ 0x8808011C, // 0012 GETMBR R2 R0 K28
+ 0x8C08051D, // 0013 GETMET R2 R2 K29
+ 0x5C100200, // 0014 MOVE R4 R1
+ 0x7C080400, // 0015 CALL R2 2
+ 0x80000000, // 0016 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: compile
+********************************************************************/
+be_local_closure(class_Tasmota_compile, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_compile,
+ &be_const_str_solidified,
+ ( &(const binstruction[85]) { /* code */
+ 0xA40A0200, // 0000 IMPORT R2 K1
+ 0x8C0C0512, // 0001 GETMET R3 R2 K18
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x5818001E, // 0003 LDCONST R6 K30
+ 0x7C0C0600, // 0004 CALL R3 3
+ 0x740E0007, // 0005 JMPT R3 #000E
+ 0x600C0001, // 0006 GETGBL R3 G1
+ 0x60100018, // 0007 GETGBL R4 G24
+ 0x5814001F, // 0008 LDCONST R5 K31
+ 0x5C180200, // 0009 MOVE R6 R1
+ 0x7C100400, // 000A CALL R4 2
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x500C0000, // 000C LDBOOL R3 0 0
+ 0x80040600, // 000D RET 1 R3
+ 0x8C0C050C, // 000E GETMET R3 R2 K12
+ 0x5C140200, // 000F MOVE R5 R1
+ 0x58180006, // 0010 LDCONST R6 K6
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0x240C0704, // 0012 GT R3 R3 K4
+ 0x780E0006, // 0013 JMPF R3 #001B
+ 0x600C0001, // 0014 GETGBL R3 G1
+ 0x60100018, // 0015 GETGBL R4 G24
+ 0x58140020, // 0016 LDCONST R5 K32
+ 0x7C100200, // 0017 CALL R4 1
+ 0x7C0C0200, // 0018 CALL R3 1
+ 0x500C0000, // 0019 LDBOOL R3 0 0
+ 0x80040600, // 001A RET 1 R3
+ 0x4C0C0000, // 001B LDNIL R3
+ 0xA8020012, // 001C EXBLK 0 #0030
+ 0x6010000D, // 001D GETGBL R4 G13
+ 0x5C140200, // 001E MOVE R5 R1
+ 0x58180021, // 001F LDCONST R6 K33
+ 0x501C0200, // 0020 LDBOOL R7 1 0
+ 0x7C100600, // 0021 CALL R4 3
+ 0x5C0C0800, // 0022 MOVE R3 R4
+ 0x4C100000, // 0023 LDNIL R4
+ 0x1C100604, // 0024 EQ R4 R3 R4
+ 0x78120007, // 0025 JMPF R4 #002E
+ 0x60100001, // 0026 GETGBL R4 G1
+ 0x60140018, // 0027 GETGBL R5 G24
+ 0x58180022, // 0028 LDCONST R6 K34
+ 0x7C140200, // 0029 CALL R5 1
+ 0x7C100200, // 002A CALL R4 1
+ 0x50100000, // 002B LDBOOL R4 0 0
+ 0xA8040001, // 002C EXBLK 1 1
+ 0x80040800, // 002D RET 1 R4
+ 0xA8040001, // 002E EXBLK 1 1
+ 0x7002000D, // 002F JMP #003E
+ 0xAC100002, // 0030 CATCH R4 0 2
+ 0x7002000A, // 0031 JMP #003D
+ 0x60180001, // 0032 GETGBL R6 G1
+ 0x601C0018, // 0033 GETGBL R7 G24
+ 0x58200023, // 0034 LDCONST R8 K35
+ 0x5C240200, // 0035 MOVE R9 R1
+ 0x5C280800, // 0036 MOVE R10 R4
+ 0x5C2C0A00, // 0037 MOVE R11 R5
+ 0x7C1C0800, // 0038 CALL R7 4
+ 0x7C180200, // 0039 CALL R6 1
+ 0x50180000, // 003A LDBOOL R6 0 0
+ 0x80040C00, // 003B RET 1 R6
+ 0x70020000, // 003C JMP #003E
+ 0xB0080000, // 003D RAISE 2 R0 R0
+ 0x00100324, // 003E ADD R4 R1 K36
+ 0xA8020005, // 003F EXBLK 0 #0046
+ 0x8C140125, // 0040 GETMET R5 R0 K37
+ 0x5C1C0800, // 0041 MOVE R7 R4
+ 0x5C200600, // 0042 MOVE R8 R3
+ 0x7C140600, // 0043 CALL R5 3
+ 0xA8040001, // 0044 EXBLK 1 1
+ 0x7002000C, // 0045 JMP #0053
+ 0xAC140001, // 0046 CATCH R5 0 1
+ 0x70020009, // 0047 JMP #0052
+ 0x60180001, // 0048 GETGBL R6 G1
+ 0x601C0018, // 0049 GETGBL R7 G24
+ 0x58200026, // 004A LDCONST R8 K38
+ 0x5C240800, // 004B MOVE R9 R4
+ 0x5C280A00, // 004C MOVE R10 R5
+ 0x7C1C0600, // 004D CALL R7 3
+ 0x7C180200, // 004E CALL R6 1
+ 0x50180000, // 004F LDBOOL R6 0 0
+ 0x80040C00, // 0050 RET 1 R6
+ 0x70020000, // 0051 JMP #0053
+ 0xB0080000, // 0052 RAISE 2 R0 R0
+ 0x50140200, // 0053 LDBOOL R5 1 0
+ 0x80040A00, // 0054 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_fast_loop
+********************************************************************/
+be_local_closure(class_Tasmota_add_fast_loop, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_add_fast_loop,
+ &be_const_str_solidified,
+ ( &(const binstruction[23]) { /* code */
+ 0x8C08011A, // 0000 GETMET R2 R0 K26
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x88080127, // 0003 GETMBR R2 R0 K39
0x4C0C0000, // 0004 LDNIL R3
- 0x200C0203, // 0005 NE R3 R1 R3
- 0x780E0004, // 0006 JMPF R3 #000C
- 0x8C0C0509, // 0007 GETMET R3 R2 K9
- 0x5C140200, // 0008 MOVE R5 R1
- 0x7C0C0400, // 0009 CALL R3 2
- 0x80040600, // 000A RET 1 R3
- 0x70020002, // 000B JMP #000F
- 0x8C0C0509, // 000C GETMET R3 R2 K9
- 0x7C0C0200, // 000D CALL R3 1
- 0x80040600, // 000E RET 1 R3
- 0x80000000, // 000F RET 0
+ 0x1C080403, // 0005 EQ R2 R2 R3
+ 0x780A0002, // 0006 JMPF R2 #000A
+ 0x60080012, // 0007 GETGBL R2 G18
+ 0x7C080000, // 0008 CALL R2 0
+ 0x90024E02, // 0009 SETMBR R0 K39 R2
+ 0x60080004, // 000A GETGBL R2 G4
+ 0x5C0C0200, // 000B MOVE R3 R1
+ 0x7C080200, // 000C CALL R2 1
+ 0x20080528, // 000D NE R2 R2 K40
+ 0x780A0000, // 000E JMPF R2 #0010
+ 0xB006532A, // 000F RAISE 1 K41 K42
+ 0x8808012B, // 0010 GETMBR R2 R0 K43
+ 0x900A592D, // 0011 SETMBR R2 K44 K45
+ 0x88080127, // 0012 GETMBR R2 R0 K39
+ 0x8C08051D, // 0013 GETMET R2 R2 K29
+ 0x5C100200, // 0014 MOVE R4 R1
+ 0x7C080400, // 0015 CALL R2 2
+ 0x80000000, // 0016 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_timer
+********************************************************************/
+be_local_closure(class_Tasmota_remove_timer, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_remove_timer,
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x8808012E, // 0000 GETMBR R2 R0 K46
+ 0x780A000E, // 0001 JMPF R2 #0011
+ 0x580C0004, // 0002 LDCONST R3 K4
+ 0x8C10052F, // 0003 GETMET R4 R2 K47
+ 0x7C100200, // 0004 CALL R4 1
+ 0x14100604, // 0005 LT R4 R3 R4
+ 0x78120009, // 0006 JMPF R4 #0011
+ 0x94100403, // 0007 GETIDX R4 R2 R3
+ 0x88100930, // 0008 GETMBR R4 R4 K48
+ 0x1C100801, // 0009 EQ R4 R4 R1
+ 0x78120003, // 000A JMPF R4 #000F
+ 0x8C100531, // 000B GETMET R4 R2 K49
+ 0x5C180600, // 000C MOVE R6 R3
+ 0x7C100400, // 000D CALL R4 2
+ 0x70020000, // 000E JMP #0010
+ 0x000C072D, // 000F ADD R3 R3 K45
+ 0x7001FFF1, // 0010 JMP #0003
+ 0x80000000, // 0011 RET 0
})
)
);
@@ -343,15 +694,15 @@ be_local_closure(class_Tasmota_is_network_up, /* name */
&be_const_str_is_network_up,
&be_const_str_solidified,
( &(const binstruction[13]) { /* code */
- 0xB8061400, // 0000 GETNGBL R1 K10
- 0x8C04030B, // 0001 GETMET R1 R1 K11
+ 0xB8060400, // 0000 GETNGBL R1 K2
+ 0x8C040332, // 0001 GETMET R1 R1 K50
0x7C040200, // 0002 CALL R1 1
- 0x9404030C, // 0003 GETIDX R1 R1 K12
+ 0x94040333, // 0003 GETIDX R1 R1 K51
0x74060005, // 0004 JMPT R1 #000B
- 0xB8061400, // 0005 GETNGBL R1 K10
- 0x8C04030D, // 0006 GETMET R1 R1 K13
+ 0xB8060400, // 0005 GETNGBL R1 K2
+ 0x8C040334, // 0006 GETMET R1 R1 K52
0x7C040200, // 0007 CALL R1 1
- 0x9404030C, // 0008 GETIDX R1 R1 K12
+ 0x94040333, // 0008 GETIDX R1 R1 K51
0x74060000, // 0009 JMPT R1 #000B
0x50040001, // 000A LDBOOL R1 0 1
0x50040200, // 000B LDBOOL R1 1 0
@@ -363,12 +714,12 @@ be_local_closure(class_Tasmota_is_network_up, /* name */
/********************************************************************
-** Solidified function: try_rule
+** Solidified function: find_list_i
********************************************************************/
-be_local_closure(class_Tasmota_try_rule, /* name */
+be_local_closure(class_Tasmota_find_list_i, /* name */
be_nested_proto(
9, /* nstack */
- 4, /* argc */
+ 3, /* argc */
10, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -376,27 +727,29 @@ be_local_closure(class_Tasmota_try_rule, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_try_rule,
+ &be_const_str_find_list_i,
&be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x8C10050E, // 0000 GETMET R4 R2 K14
- 0x5C180200, // 0001 MOVE R6 R1
- 0x7C100400, // 0002 CALL R4 2
- 0x4C140000, // 0003 LDNIL R5
- 0x20140805, // 0004 NE R5 R4 R5
- 0x78160009, // 0005 JMPF R5 #0010
- 0x4C140000, // 0006 LDNIL R5
- 0x20140605, // 0007 NE R5 R3 R5
- 0x78160004, // 0008 JMPF R5 #000E
- 0x5C140600, // 0009 MOVE R5 R3
- 0x5C180800, // 000A MOVE R6 R4
- 0x881C050F, // 000B GETMBR R7 R2 K15
- 0x5C200200, // 000C MOVE R8 R1
- 0x7C140600, // 000D CALL R5 3
- 0x50140200, // 000E LDBOOL R5 1 0
- 0x80040A00, // 000F RET 1 R5
- 0x50140000, // 0010 LDBOOL R5 0 0
- 0x80040A00, // 0011 RET 1 R5
+ ( &(const binstruction[20]) { /* code */
+ 0xA40E0200, // 0000 IMPORT R3 K1
+ 0x58100004, // 0001 LDCONST R4 K4
+ 0x8C140735, // 0002 GETMET R5 R3 K53
+ 0x5C1C0400, // 0003 MOVE R7 R2
+ 0x7C140400, // 0004 CALL R5 2
+ 0x6018000C, // 0005 GETGBL R6 G12
+ 0x5C1C0200, // 0006 MOVE R7 R1
+ 0x7C180200, // 0007 CALL R6 1
+ 0x14180806, // 0008 LT R6 R4 R6
+ 0x781A0007, // 0009 JMPF R6 #0012
+ 0x8C180735, // 000A GETMET R6 R3 K53
+ 0x94200204, // 000B GETIDX R8 R1 R4
+ 0x7C180400, // 000C CALL R6 2
+ 0x1C180C05, // 000D EQ R6 R6 R5
+ 0x781A0000, // 000E JMPF R6 #0010
+ 0x80040800, // 000F RET 1 R4
+ 0x0010092D, // 0010 ADD R4 R4 K45
+ 0x7001FFF2, // 0011 JMP #0005
+ 0x4C180000, // 0012 LDNIL R6
+ 0x80040C00, // 0013 RET 1 R6
})
)
);
@@ -404,11 +757,109 @@ be_local_closure(class_Tasmota_try_rule, /* name */
/********************************************************************
-** Solidified function: defer
+** Solidified function: set_light
********************************************************************/
-be_local_closure(class_Tasmota_defer, /* name */
+be_local_closure(class_Tasmota_set_light, /* name */
be_nested_proto(
- 5, /* nstack */
+ 8, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_set_light,
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x600C0001, // 0000 GETGBL R3 G1
+ 0x58100036, // 0001 LDCONST R4 K54
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0xA40E6E00, // 0003 IMPORT R3 K55
+ 0x4C100000, // 0004 LDNIL R4
+ 0x20100404, // 0005 NE R4 R2 R4
+ 0x78120005, // 0006 JMPF R4 #000D
+ 0x8C100738, // 0007 GETMET R4 R3 K56
+ 0x5C180200, // 0008 MOVE R6 R1
+ 0x5C1C0400, // 0009 MOVE R7 R2
+ 0x7C100600, // 000A CALL R4 3
+ 0x80040800, // 000B RET 1 R4
+ 0x70020003, // 000C JMP #0011
+ 0x8C100738, // 000D GETMET R4 R3 K56
+ 0x5C180200, // 000E MOVE R6 R1
+ 0x7C100400, // 000F CALL R4 2
+ 0x80040800, // 0010 RET 1 R4
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: run_cron
+********************************************************************/
+be_local_closure(class_Tasmota_run_cron, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_run_cron,
+ &be_const_str_solidified,
+ ( &(const binstruction[34]) { /* code */
+ 0x88040139, // 0000 GETMBR R1 R0 K57
+ 0x7806001E, // 0001 JMPF R1 #0021
+ 0x58040004, // 0002 LDCONST R1 K4
+ 0xB80A7400, // 0003 GETNGBL R2 K58
+ 0x8C08053B, // 0004 GETMET R2 R2 K59
+ 0x7C080200, // 0005 CALL R2 1
+ 0x880C0139, // 0006 GETMBR R3 R0 K57
+ 0x8C0C072F, // 0007 GETMET R3 R3 K47
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0x140C0203, // 0009 LT R3 R1 R3
+ 0x780E0015, // 000A JMPF R3 #0021
+ 0x880C0139, // 000B GETMBR R3 R0 K57
+ 0x940C0601, // 000C GETIDX R3 R3 R1
+ 0x8810073C, // 000D GETMBR R4 R3 K60
+ 0x1C100904, // 000E EQ R4 R4 K4
+ 0x78120003, // 000F JMPF R4 #0014
+ 0x8C10073D, // 0010 GETMET R4 R3 K61
+ 0x7C100200, // 0011 CALL R4 1
+ 0x900E7804, // 0012 SETMBR R3 K60 R4
+ 0x7002000A, // 0013 JMP #001F
+ 0x8C10073E, // 0014 GETMET R4 R3 K62
+ 0x7C100200, // 0015 CALL R4 1
+ 0x78120007, // 0016 JMPF R4 #001F
+ 0x8810073F, // 0017 GETMBR R4 R3 K63
+ 0x8C14073D, // 0018 GETMET R5 R3 K61
+ 0x7C140200, // 0019 CALL R5 1
+ 0x900E7805, // 001A SETMBR R3 K60 R5
+ 0x5C180800, // 001B MOVE R6 R4
+ 0x5C1C0400, // 001C MOVE R7 R2
+ 0x5C200A00, // 001D MOVE R8 R5
+ 0x7C180400, // 001E CALL R6 2
+ 0x0004032D, // 001F ADD R1 R1 K45
+ 0x7001FFE4, // 0020 JMP #0006
+ 0x80000000, // 0021 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_cron
+********************************************************************/
+be_local_closure(class_Tasmota_remove_cron, /* name */
+ be_nested_proto(
+ 7, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -417,24 +868,130 @@ be_local_closure(class_Tasmota_defer, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_defer,
+ &be_const_str_remove_cron,
&be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x88080110, // 0000 GETMBR R2 R0 K16
- 0x4C0C0000, // 0001 LDNIL R3
- 0x1C080403, // 0002 EQ R2 R2 R3
- 0x780A0002, // 0003 JMPF R2 #0007
- 0x60080012, // 0004 GETGBL R2 G18
- 0x7C080000, // 0005 CALL R2 0
- 0x90022002, // 0006 SETMBR R0 K16 R2
- 0x88080110, // 0007 GETMBR R2 R0 K16
- 0x8C080511, // 0008 GETMET R2 R2 K17
- 0x5C100200, // 0009 MOVE R4 R1
- 0x7C080400, // 000A CALL R2 2
- 0xB80A1400, // 000B GETNGBL R2 K10
- 0x88080512, // 000C GETMBR R2 R2 K18
- 0x900A2705, // 000D SETMBR R2 K19 K5
- 0x80000000, // 000E RET 0
+ ( &(const binstruction[18]) { /* code */
+ 0x88080139, // 0000 GETMBR R2 R0 K57
+ 0x780A000E, // 0001 JMPF R2 #0011
+ 0x580C0004, // 0002 LDCONST R3 K4
+ 0x8C10052F, // 0003 GETMET R4 R2 K47
+ 0x7C100200, // 0004 CALL R4 1
+ 0x14100604, // 0005 LT R4 R3 R4
+ 0x78120009, // 0006 JMPF R4 #0011
+ 0x94100403, // 0007 GETIDX R4 R2 R3
+ 0x88100930, // 0008 GETMBR R4 R4 K48
+ 0x1C100801, // 0009 EQ R4 R4 R1
+ 0x78120003, // 000A JMPF R4 #000F
+ 0x8C100531, // 000B GETMET R4 R2 K49
+ 0x5C180600, // 000C MOVE R6 R3
+ 0x7C100400, // 000D CALL R4 2
+ 0x70020000, // 000E JMP #0010
+ 0x000C072D, // 000F ADD R3 R3 K45
+ 0x7001FFF1, // 0010 JMP #0003
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: cmd
+********************************************************************/
+be_local_closure(class_Tasmota_cmd, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_cmd,
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x880C0140, // 0000 GETMBR R3 R0 K64
+ 0x50100200, // 0001 LDBOOL R4 1 0
+ 0x90028004, // 0002 SETMBR R0 K64 R4
+ 0xB8120400, // 0003 GETNGBL R4 K2
+ 0x8810092B, // 0004 GETMBR R4 R4 K43
+ 0x88100941, // 0005 GETMBR R4 R4 K65
+ 0x780A0004, // 0006 JMPF R2 #000C
+ 0x28140942, // 0007 GE R5 R4 K66
+ 0x78160002, // 0008 JMPF R5 #000C
+ 0xB8160400, // 0009 GETNGBL R5 K2
+ 0x88140B2B, // 000A GETMBR R5 R5 K43
+ 0x9016832D, // 000B SETMBR R5 K65 K45
+ 0x8C140143, // 000C GETMET R5 R0 K67
+ 0x5C1C0200, // 000D MOVE R7 R1
+ 0x7C140400, // 000E CALL R5 2
+ 0x4C140000, // 000F LDNIL R5
+ 0x88180140, // 0010 GETMBR R6 R0 K64
+ 0x501C0200, // 0011 LDBOOL R7 1 0
+ 0x20180C07, // 0012 NE R6 R6 R7
+ 0x781A0000, // 0013 JMPF R6 #0015
+ 0x88140140, // 0014 GETMBR R5 R0 K64
+ 0x90028003, // 0015 SETMBR R0 K64 R3
+ 0x780A0002, // 0016 JMPF R2 #001A
+ 0xB81A0400, // 0017 GETNGBL R6 K2
+ 0x88180D2B, // 0018 GETMBR R6 R6 K43
+ 0x901A8204, // 0019 SETMBR R6 K65 R4
+ 0x80040A00, // 001A RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_key_i
+********************************************************************/
+be_local_closure(class_Tasmota_find_key_i, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_find_key_i,
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0xA40E0200, // 0000 IMPORT R3 K1
+ 0x8C100735, // 0001 GETMET R4 R3 K53
+ 0x5C180400, // 0002 MOVE R6 R2
+ 0x7C100400, // 0003 CALL R4 2
+ 0x6014000F, // 0004 GETGBL R5 G15
+ 0x5C180200, // 0005 MOVE R6 R1
+ 0x601C0013, // 0006 GETGBL R7 G19
+ 0x7C140400, // 0007 CALL R5 2
+ 0x78160013, // 0008 JMPF R5 #001D
+ 0x60140010, // 0009 GETGBL R5 G16
+ 0x8C180344, // 000A GETMET R6 R1 K68
+ 0x7C180200, // 000B CALL R6 1
+ 0x7C140200, // 000C CALL R5 1
+ 0xA802000B, // 000D EXBLK 0 #001A
+ 0x5C180A00, // 000E MOVE R6 R5
+ 0x7C180000, // 000F CALL R6 0
+ 0x8C1C0735, // 0010 GETMET R7 R3 K53
+ 0x5C240C00, // 0011 MOVE R9 R6
+ 0x7C1C0400, // 0012 CALL R7 2
+ 0x1C1C0E04, // 0013 EQ R7 R7 R4
+ 0x741E0001, // 0014 JMPT R7 #0017
+ 0x1C1C0545, // 0015 EQ R7 R2 K69
+ 0x781E0001, // 0016 JMPF R7 #0019
+ 0xA8040001, // 0017 EXBLK 1 1
+ 0x80040C00, // 0018 RET 1 R6
+ 0x7001FFF3, // 0019 JMP #000E
+ 0x58140046, // 001A LDCONST R5 K70
+ 0xAC140200, // 001B CATCH R5 1 0
+ 0xB0080000, // 001C RAISE 2 R0 R0
+ 0x80000000, // 001D RET 0
})
)
);
@@ -458,31 +1015,31 @@ be_local_closure(class_Tasmota_remove_rule, /* name */
&be_const_str_remove_rule,
&be_const_str_solidified,
( &(const binstruction[27]) { /* code */
- 0x880C0114, // 0000 GETMBR R3 R0 K20
+ 0x880C0147, // 0000 GETMBR R3 R0 K71
0x780E0017, // 0001 JMPF R3 #001A
- 0x580C0001, // 0002 LDCONST R3 K1
+ 0x580C0004, // 0002 LDCONST R3 K4
0x6010000C, // 0003 GETGBL R4 G12
- 0x88140114, // 0004 GETMBR R5 R0 K20
+ 0x88140147, // 0004 GETMBR R5 R0 K71
0x7C100200, // 0005 CALL R4 1
0x14100604, // 0006 LT R4 R3 R4
0x78120011, // 0007 JMPF R4 #001A
- 0x88100114, // 0008 GETMBR R4 R0 K20
+ 0x88100147, // 0008 GETMBR R4 R0 K71
0x94100803, // 0009 GETIDX R4 R4 R3
- 0x88100904, // 000A GETMBR R4 R4 K4
- 0x88100915, // 000B GETMBR R4 R4 K21
+ 0x8810093C, // 000A GETMBR R4 R4 K60
+ 0x88100948, // 000B GETMBR R4 R4 K72
0x1C100801, // 000C EQ R4 R4 R1
0x78120009, // 000D JMPF R4 #0018
- 0x88100114, // 000E GETMBR R4 R0 K20
+ 0x88100147, // 000E GETMBR R4 R0 K71
0x94100803, // 000F GETIDX R4 R4 R3
- 0x88100903, // 0010 GETMBR R4 R4 K3
+ 0x88100930, // 0010 GETMBR R4 R4 K48
0x1C100802, // 0011 EQ R4 R4 R2
0x78120004, // 0012 JMPF R4 #0018
- 0x88100114, // 0013 GETMBR R4 R0 K20
- 0x8C100916, // 0014 GETMET R4 R4 K22
+ 0x88100147, // 0013 GETMBR R4 R0 K71
+ 0x8C100931, // 0014 GETMET R4 R4 K49
0x5C180600, // 0015 MOVE R6 R3
0x7C100400, // 0016 CALL R4 2
0x70020000, // 0017 JMP #0019
- 0x000C0705, // 0018 ADD R3 R3 K5
+ 0x000C072D, // 0018 ADD R3 R3 K45
0x7001FFE8, // 0019 JMP #0003
0x80000000, // 001A RET 0
})
@@ -492,102 +1049,11 @@ be_local_closure(class_Tasmota_remove_rule, /* name */
/********************************************************************
-** Solidified function: hs2rgb
+** Solidified function: remove_driver
********************************************************************/
-be_local_closure(class_Tasmota_hs2rgb, /* name */
+be_local_closure(class_Tasmota_remove_driver, /* name */
be_nested_proto(
- 17, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_hs2rgb,
- &be_const_str_solidified,
- ( &(const binstruction[68]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x1C0C0403, // 0001 EQ R3 R2 R3
- 0x780E0000, // 0002 JMPF R3 #0004
- 0x540A00FE, // 0003 LDINT R2 255
- 0x540E00FE, // 0004 LDINT R3 255
- 0x541200FE, // 0005 LDINT R4 255
- 0x541600FE, // 0006 LDINT R5 255
- 0x541A0167, // 0007 LDINT R6 360
- 0x10040206, // 0008 MOD R1 R1 R6
- 0x24180501, // 0009 GT R6 R2 K1
- 0x781A0031, // 000A JMPF R6 #003D
- 0x541A003B, // 000B LDINT R6 60
- 0x0C180206, // 000C DIV R6 R1 R6
- 0x541E003B, // 000D LDINT R7 60
- 0x101C0207, // 000E MOD R7 R1 R7
- 0x542200FE, // 000F LDINT R8 255
- 0x04201002, // 0010 SUB R8 R8 R2
- 0xB8261400, // 0011 GETNGBL R9 K10
- 0x8C241317, // 0012 GETMET R9 R9 K23
- 0x5C2C0E00, // 0013 MOVE R11 R7
- 0x58300001, // 0014 LDCONST R12 K1
- 0x5436003B, // 0015 LDINT R13 60
- 0x543A00FE, // 0016 LDINT R14 255
- 0x5C3C1000, // 0017 MOVE R15 R8
- 0x7C240C00, // 0018 CALL R9 6
- 0xB82A1400, // 0019 GETNGBL R10 K10
- 0x8C281517, // 001A GETMET R10 R10 K23
- 0x5C300E00, // 001B MOVE R12 R7
- 0x58340001, // 001C LDCONST R13 K1
- 0x543A003B, // 001D LDINT R14 60
- 0x5C3C1000, // 001E MOVE R15 R8
- 0x544200FE, // 001F LDINT R16 255
- 0x7C280C00, // 0020 CALL R10 6
- 0x1C2C0D01, // 0021 EQ R11 R6 K1
- 0x782E0002, // 0022 JMPF R11 #0026
- 0x5C141400, // 0023 MOVE R5 R10
- 0x5C101000, // 0024 MOVE R4 R8
- 0x70020016, // 0025 JMP #003D
- 0x1C2C0D05, // 0026 EQ R11 R6 K5
- 0x782E0002, // 0027 JMPF R11 #002B
- 0x5C0C1200, // 0028 MOVE R3 R9
- 0x5C101000, // 0029 MOVE R4 R8
- 0x70020011, // 002A JMP #003D
- 0x1C2C0D18, // 002B EQ R11 R6 K24
- 0x782E0002, // 002C JMPF R11 #0030
- 0x5C0C1000, // 002D MOVE R3 R8
- 0x5C101400, // 002E MOVE R4 R10
- 0x7002000C, // 002F JMP #003D
- 0x1C2C0D19, // 0030 EQ R11 R6 K25
- 0x782E0002, // 0031 JMPF R11 #0035
- 0x5C0C1000, // 0032 MOVE R3 R8
- 0x5C141200, // 0033 MOVE R5 R9
- 0x70020007, // 0034 JMP #003D
- 0x542E0003, // 0035 LDINT R11 4
- 0x1C2C0C0B, // 0036 EQ R11 R6 R11
- 0x782E0002, // 0037 JMPF R11 #003B
- 0x5C0C1400, // 0038 MOVE R3 R10
- 0x5C141000, // 0039 MOVE R5 R8
- 0x70020001, // 003A JMP #003D
- 0x5C141000, // 003B MOVE R5 R8
- 0x5C101200, // 003C MOVE R4 R9
- 0x541A000F, // 003D LDINT R6 16
- 0x38180606, // 003E SHL R6 R3 R6
- 0x541E0007, // 003F LDINT R7 8
- 0x381C0A07, // 0040 SHL R7 R5 R7
- 0x30180C07, // 0041 OR R6 R6 R7
- 0x30180C04, // 0042 OR R6 R6 R4
- 0x80040C00, // 0043 RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_driver
-********************************************************************/
-be_local_closure(class_Tasmota_add_driver, /* name */
- be_nested_proto(
- 5, /* nstack */
+ 6, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -596,34 +1062,29 @@ be_local_closure(class_Tasmota_add_driver, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_driver,
+ &be_const_str_remove_driver,
&be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x60080004, // 0000 GETGBL R2 G4
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x2008051A, // 0003 NE R2 R2 K26
- 0x780A0000, // 0004 JMPF R2 #0006
- 0xB006371C, // 0005 RAISE 1 K27 K28
- 0x8808011D, // 0006 GETMBR R2 R0 K29
- 0x780A000B, // 0007 JMPF R2 #0014
- 0x8808011D, // 0008 GETMBR R2 R0 K29
- 0x8C08051E, // 0009 GETMET R2 R2 K30
- 0x5C100200, // 000A MOVE R4 R1
- 0x7C080400, // 000B CALL R2 2
- 0x4C0C0000, // 000C LDNIL R3
- 0x1C080403, // 000D EQ R2 R2 R3
+ ( &(const binstruction[20]) { /* code */
+ 0x88080149, // 0000 GETMBR R2 R0 K73
+ 0x780A000A, // 0001 JMPF R2 #000D
+ 0x88080149, // 0002 GETMBR R2 R0 K73
+ 0x8C08050C, // 0003 GETMET R2 R2 K12
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x4C0C0000, // 0006 LDNIL R3
+ 0x200C0403, // 0007 NE R3 R2 R3
+ 0x780E0003, // 0008 JMPF R3 #000D
+ 0x880C0149, // 0009 GETMBR R3 R0 K73
+ 0x8C0C074A, // 000A GETMET R3 R3 K74
+ 0x5C140400, // 000B MOVE R5 R2
+ 0x7C0C0400, // 000C CALL R3 2
+ 0x8808014B, // 000D GETMBR R2 R0 K75
0x780A0003, // 000E JMPF R2 #0013
- 0x8808011D, // 000F GETMBR R2 R0 K29
- 0x8C080511, // 0010 GETMET R2 R2 K17
+ 0x8808014B, // 000F GETMBR R2 R0 K75
+ 0x8C08054C, // 0010 GETMET R2 R2 K76
0x5C100200, // 0011 MOVE R4 R1
0x7C080400, // 0012 CALL R2 2
- 0x70020003, // 0013 JMP #0018
- 0x60080012, // 0014 GETGBL R2 G18
- 0x7C080000, // 0015 CALL R2 0
- 0x400C0401, // 0016 CONNECT R3 R2 R1
- 0x90023A02, // 0017 SETMBR R0 K29 R2
- 0x80000000, // 0018 RET 0
+ 0x80000000, // 0013 RET 0
})
)
);
@@ -631,11 +1092,11 @@ be_local_closure(class_Tasmota_add_driver, /* name */
/********************************************************************
-** Solidified function: exec_rules
+** Solidified function: add_cmd
********************************************************************/
-be_local_closure(class_Tasmota_exec_rules, /* name */
+be_local_closure(class_Tasmota_add_cmd, /* name */
be_nested_proto(
- 14, /* nstack */
+ 6, /* nstack */
3, /* argc */
10, /* varg */
0, /* has upvals */
@@ -644,69 +1105,29 @@ be_local_closure(class_Tasmota_exec_rules, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_exec_rules,
+ &be_const_str_add_cmd,
&be_const_str_solidified,
- ( &(const binstruction[60]) { /* code */
- 0x880C011F, // 0000 GETMBR R3 R0 K31
- 0x88100114, // 0001 GETMBR R4 R0 K20
- 0x74120002, // 0002 JMPT R4 #0006
- 0x4C100000, // 0003 LDNIL R4
- 0x20100604, // 0004 NE R4 R3 R4
- 0x78120033, // 0005 JMPF R4 #003A
- 0xA4124000, // 0006 IMPORT R4 K32
- 0x4C140000, // 0007 LDNIL R5
- 0x90023E05, // 0008 SETMBR R0 K31 R5
- 0x50140000, // 0009 LDBOOL R5 0 0
- 0x8C180921, // 000A GETMET R6 R4 K33
- 0x5C200200, // 000B MOVE R8 R1
- 0x7C180400, // 000C CALL R6 2
- 0x4C1C0000, // 000D LDNIL R7
- 0x1C1C0C07, // 000E EQ R7 R6 R7
- 0x781E0004, // 000F JMPF R7 #0015
- 0x8C1C0122, // 0010 GETMET R7 R0 K34
- 0x00264601, // 0011 ADD R9 K35 R1
- 0x58280019, // 0012 LDCONST R10 K25
- 0x7C1C0600, // 0013 CALL R7 3
- 0x5C180200, // 0014 MOVE R6 R1
- 0x780A001E, // 0015 JMPF R2 #0035
- 0x881C0114, // 0016 GETMBR R7 R0 K20
- 0x781E001C, // 0017 JMPF R7 #0035
- 0x581C0001, // 0018 LDCONST R7 K1
- 0x6020000C, // 0019 GETGBL R8 G12
- 0x88240114, // 001A GETMBR R9 R0 K20
- 0x7C200200, // 001B CALL R8 1
- 0x14200E08, // 001C LT R8 R7 R8
- 0x78220016, // 001D JMPF R8 #0035
- 0x88200114, // 001E GETMBR R8 R0 K20
- 0x94201007, // 001F GETIDX R8 R8 R7
- 0x8C240124, // 0020 GETMET R9 R0 K36
- 0x5C2C0C00, // 0021 MOVE R11 R6
- 0x88301104, // 0022 GETMBR R12 R8 K4
- 0x88341125, // 0023 GETMBR R13 R8 K37
- 0x7C240800, // 0024 CALL R9 4
- 0x74160001, // 0025 JMPT R5 #0028
- 0x74260000, // 0026 JMPT R9 #0028
- 0x50140001, // 0027 LDBOOL R5 0 1
- 0x50140200, // 0028 LDBOOL R5 1 0
- 0x78260008, // 0029 JMPF R9 #0033
- 0x88281126, // 002A GETMBR R10 R8 K38
- 0x502C0200, // 002B LDBOOL R11 1 0
- 0x1C28140B, // 002C EQ R10 R10 R11
- 0x782A0004, // 002D JMPF R10 #0033
- 0x88280114, // 002E GETMBR R10 R0 K20
- 0x8C281516, // 002F GETMET R10 R10 K22
- 0x5C300E00, // 0030 MOVE R12 R7
- 0x7C280400, // 0031 CALL R10 2
- 0x70020000, // 0032 JMP #0034
- 0x001C0F05, // 0033 ADD R7 R7 K5
- 0x7001FFE3, // 0034 JMP #0019
- 0x4C1C0000, // 0035 LDNIL R7
- 0x201C0607, // 0036 NE R7 R3 R7
- 0x781E0000, // 0037 JMPF R7 #0039
- 0x90023E06, // 0038 SETMBR R0 K31 R6
- 0x80040A00, // 0039 RET 1 R5
- 0x50100000, // 003A LDBOOL R4 0 0
- 0x80040800, // 003B RET 1 R4
+ ( &(const binstruction[20]) { /* code */
+ 0x8C0C011A, // 0000 GETMET R3 R0 K26
+ 0x5C140400, // 0001 MOVE R5 R2
+ 0x7C0C0400, // 0002 CALL R3 2
+ 0x880C0116, // 0003 GETMBR R3 R0 K22
+ 0x4C100000, // 0004 LDNIL R4
+ 0x1C0C0604, // 0005 EQ R3 R3 R4
+ 0x780E0002, // 0006 JMPF R3 #000A
+ 0x600C0013, // 0007 GETGBL R3 G19
+ 0x7C0C0000, // 0008 CALL R3 0
+ 0x90022C03, // 0009 SETMBR R0 K22 R3
+ 0x600C0004, // 000A GETGBL R3 G4
+ 0x5C100400, // 000B MOVE R4 R2
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x1C0C0728, // 000D EQ R3 R3 K40
+ 0x780E0002, // 000E JMPF R3 #0012
+ 0x880C0116, // 000F GETMBR R3 R0 K22
+ 0x980C0202, // 0010 SETIDX R3 R1 R2
+ 0x70020000, // 0011 JMP #0013
+ 0xB006534D, // 0012 RAISE 1 K41 K77
+ 0x80000000, // 0013 RET 0
})
)
);
@@ -714,11 +1135,49 @@ be_local_closure(class_Tasmota_exec_rules, /* name */
/********************************************************************
-** Solidified function: set_timer
+** Solidified function: remove_fast_loop
********************************************************************/
-be_local_closure(class_Tasmota_set_timer, /* name */
+be_local_closure(class_Tasmota_remove_fast_loop, /* name */
be_nested_proto(
- 10, /* nstack */
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_remove_fast_loop,
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x88080127, // 0000 GETMBR R2 R0 K39
+ 0x740A0000, // 0001 JMPT R2 #0003
+ 0x80000400, // 0002 RET 0
+ 0x88080127, // 0003 GETMBR R2 R0 K39
+ 0x8C08050C, // 0004 GETMET R2 R2 K12
+ 0x5C100200, // 0005 MOVE R4 R1
+ 0x7C080400, // 0006 CALL R2 2
+ 0x4C0C0000, // 0007 LDNIL R3
+ 0x200C0403, // 0008 NE R3 R2 R3
+ 0x780E0003, // 0009 JMPF R3 #000E
+ 0x880C0127, // 000A GETMBR R3 R0 K39
+ 0x8C0C0731, // 000B GETMET R3 R3 K49
+ 0x5C140400, // 000C MOVE R5 R2
+ 0x7C0C0400, // 000D CALL R3 2
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_cron
+********************************************************************/
+be_local_closure(class_Tasmota_add_cron, /* name */
+ be_nested_proto(
+ 13, /* nstack */
4, /* argc */
10, /* varg */
0, /* has upvals */
@@ -727,30 +1186,490 @@ be_local_closure(class_Tasmota_set_timer, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_set_timer,
+ &be_const_str_add_cron,
&be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
- 0x8C100127, // 0000 GETMET R4 R0 K39
+ ( &(const binstruction[27]) { /* code */
+ 0x8C10011A, // 0000 GETMET R4 R0 K26
0x5C180400, // 0001 MOVE R6 R2
0x7C100400, // 0002 CALL R4 2
- 0x88100128, // 0003 GETMBR R4 R0 K40
+ 0x88100139, // 0003 GETMBR R4 R0 K57
0x4C140000, // 0004 LDNIL R5
0x1C100805, // 0005 EQ R4 R4 R5
0x78120002, // 0006 JMPF R4 #000A
0x60100012, // 0007 GETGBL R4 G18
0x7C100000, // 0008 CALL R4 0
- 0x90025004, // 0009 SETMBR R0 K40 R4
- 0x88100128, // 000A GETMBR R4 R0 K40
- 0x8C100911, // 000B GETMET R4 R4 K17
- 0xB81A5200, // 000C GETNGBL R6 K41
- 0x8C1C012A, // 000D GETMET R7 R0 K42
- 0x5C240200, // 000E MOVE R9 R1
- 0x7C1C0400, // 000F CALL R7 2
- 0x5C200400, // 0010 MOVE R8 R2
- 0x5C240600, // 0011 MOVE R9 R3
- 0x7C180600, // 0012 CALL R6 3
- 0x7C100400, // 0013 CALL R4 2
- 0x80000000, // 0014 RET 0
+ 0x90027204, // 0009 SETMBR R0 K57 R4
+ 0xB8127400, // 000A GETNGBL R4 K58
+ 0x60140008, // 000B GETGBL R5 G8
+ 0x5C180200, // 000C MOVE R6 R1
+ 0x7C140200, // 000D CALL R5 1
+ 0x7C100200, // 000E CALL R4 1
+ 0x8C14093D, // 000F GETMET R5 R4 K61
+ 0x7C140200, // 0010 CALL R5 1
+ 0x88180139, // 0011 GETMBR R6 R0 K57
+ 0x8C180D1D, // 0012 GETMET R6 R6 K29
+ 0xB8229C00, // 0013 GETNGBL R8 K78
+ 0x5C240A00, // 0014 MOVE R9 R5
+ 0x5C280400, // 0015 MOVE R10 R2
+ 0x5C2C0600, // 0016 MOVE R11 R3
+ 0x5C300800, // 0017 MOVE R12 R4
+ 0x7C200800, // 0018 CALL R8 4
+ 0x7C180400, // 0019 CALL R6 2
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: exec_tele
+********************************************************************/
+be_local_closure(class_Tasmota_exec_tele, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_exec_tele,
+ &be_const_str_solidified,
+ ( &(const binstruction[41]) { /* code */
+ 0x88080147, // 0000 GETMBR R2 R0 K71
+ 0x780A0024, // 0001 JMPF R2 #0027
+ 0xA40A0000, // 0002 IMPORT R2 K0
+ 0x8C0C050B, // 0003 GETMET R3 R2 K11
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x50100000, // 0006 LDBOOL R4 0 0
+ 0x4C140000, // 0007 LDNIL R5
+ 0x1C140605, // 0008 EQ R5 R3 R5
+ 0x78160004, // 0009 JMPF R5 #000F
+ 0x8C140114, // 000A GETMET R5 R0 K20
+ 0x001E9E01, // 000B ADD R7 K79 R1
+ 0x58200050, // 000C LDCONST R8 K80
+ 0x7C140600, // 000D CALL R5 3
+ 0x5C0C0200, // 000E MOVE R3 R1
+ 0x60140013, // 000F GETGBL R5 G19
+ 0x7C140000, // 0010 CALL R5 0
+ 0x9816A203, // 0011 SETIDX R5 K81 R3
+ 0x5C0C0A00, // 0012 MOVE R3 R5
+ 0x58140004, // 0013 LDCONST R5 K4
+ 0x6018000C, // 0014 GETGBL R6 G12
+ 0x881C0147, // 0015 GETMBR R7 R0 K71
+ 0x7C180200, // 0016 CALL R6 1
+ 0x14180A06, // 0017 LT R6 R5 R6
+ 0x781A000C, // 0018 JMPF R6 #0026
+ 0x88180147, // 0019 GETMBR R6 R0 K71
+ 0x94180C05, // 001A GETIDX R6 R6 R5
+ 0x8C1C0152, // 001B GETMET R7 R0 K82
+ 0x5C240600, // 001C MOVE R9 R3
+ 0x88280D3C, // 001D GETMBR R10 R6 K60
+ 0x882C0D3F, // 001E GETMBR R11 R6 K63
+ 0x7C1C0800, // 001F CALL R7 4
+ 0x741E0001, // 0020 JMPT R7 #0023
+ 0x74120000, // 0021 JMPT R4 #0023
+ 0x50100001, // 0022 LDBOOL R4 0 1
+ 0x50100200, // 0023 LDBOOL R4 1 0
+ 0x00140B2D, // 0024 ADD R5 R5 K45
+ 0x7001FFED, // 0025 JMP #0014
+ 0x80040800, // 0026 RET 1 R4
+ 0x50080000, // 0027 LDBOOL R2 0 0
+ 0x80040400, // 0028 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: gen_cb
+********************************************************************/
+be_local_closure(class_Tasmota_gen_cb, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_gen_cb,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xA40AA600, // 0000 IMPORT R2 K83
+ 0x8C0C0554, // 0001 GETMET R3 R2 K84
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0x80040600, // 0004 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: run_network_up
+********************************************************************/
+be_local_closure(class_Tasmota_run_network_up, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_run_network_up,
+ &be_const_str_solidified,
+ ( &(const binstruction[39]) { /* code */
+ 0x8804011C, // 0000 GETMBR R1 R0 K28
+ 0x4C080000, // 0001 LDNIL R2
+ 0x1C040202, // 0002 EQ R1 R1 R2
+ 0x78060000, // 0003 JMPF R1 #0005
+ 0x80000200, // 0004 RET 0
+ 0x8C04011B, // 0005 GETMET R1 R0 K27
+ 0x7C040200, // 0006 CALL R1 1
+ 0x7806001D, // 0007 JMPF R1 #0026
+ 0x6004000C, // 0008 GETGBL R1 G12
+ 0x8808011C, // 0009 GETMBR R2 R0 K28
+ 0x7C040200, // 000A CALL R1 1
+ 0x24040304, // 000B GT R1 R1 K4
+ 0x78060016, // 000C JMPF R1 #0024
+ 0x8804011C, // 000D GETMBR R1 R0 K28
+ 0x94040304, // 000E GETIDX R1 R1 K4
+ 0x8808011C, // 000F GETMBR R2 R0 K28
+ 0x8C080531, // 0010 GETMET R2 R2 K49
+ 0x58100004, // 0011 LDCONST R4 K4
+ 0x7C080400, // 0012 CALL R2 2
+ 0xA8020003, // 0013 EXBLK 0 #0018
+ 0x5C080200, // 0014 MOVE R2 R1
+ 0x7C080000, // 0015 CALL R2 0
+ 0xA8040001, // 0016 EXBLK 1 1
+ 0x7002000A, // 0017 JMP #0023
+ 0xAC080002, // 0018 CATCH R2 0 2
+ 0x70020007, // 0019 JMP #0022
+ 0x60100001, // 001A GETGBL R4 G1
+ 0x60140018, // 001B GETGBL R5 G24
+ 0x58180055, // 001C LDCONST R6 K85
+ 0x5C1C0400, // 001D MOVE R7 R2
+ 0x5C200600, // 001E MOVE R8 R3
+ 0x7C140600, // 001F CALL R5 3
+ 0x7C100200, // 0020 CALL R4 1
+ 0x70020000, // 0021 JMP #0023
+ 0xB0080000, // 0022 RAISE 2 R0 R0
+ 0x7001FFE3, // 0023 JMP #0008
+ 0x4C040000, // 0024 LDNIL R1
+ 0x90023801, // 0025 SETMBR R0 K28 R1
+ 0x80000000, // 0026 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: run_timers
+********************************************************************/
+be_local_closure(class_Tasmota_run_timers, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_run_timers,
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x8C040156, // 0000 GETMET R1 R0 K86
+ 0x7C040200, // 0001 CALL R1 1
+ 0x8804012E, // 0002 GETMBR R1 R0 K46
+ 0x78060015, // 0003 JMPF R1 #001A
+ 0x58040004, // 0004 LDCONST R1 K4
+ 0x8808012E, // 0005 GETMBR R2 R0 K46
+ 0x8C08052F, // 0006 GETMET R2 R2 K47
+ 0x7C080200, // 0007 CALL R2 1
+ 0x14080202, // 0008 LT R2 R1 R2
+ 0x780A000F, // 0009 JMPF R2 #001A
+ 0x8808012E, // 000A GETMBR R2 R0 K46
+ 0x94080401, // 000B GETIDX R2 R2 R1
+ 0x8C0C013E, // 000C GETMET R3 R0 K62
+ 0x8814053C, // 000D GETMBR R5 R2 K60
+ 0x7C0C0400, // 000E CALL R3 2
+ 0x780E0007, // 000F JMPF R3 #0018
+ 0x880C053F, // 0010 GETMBR R3 R2 K63
+ 0x8810012E, // 0011 GETMBR R4 R0 K46
+ 0x8C100931, // 0012 GETMET R4 R4 K49
+ 0x5C180200, // 0013 MOVE R6 R1
+ 0x7C100400, // 0014 CALL R4 2
+ 0x5C100600, // 0015 MOVE R4 R3
+ 0x7C100000, // 0016 CALL R4 0
+ 0x70020000, // 0017 JMP #0019
+ 0x0004032D, // 0018 ADD R1 R1 K45
+ 0x7001FFEA, // 0019 JMP #0005
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_extension
+********************************************************************/
+be_local_closure(class_Tasmota_add_extension, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_add_extension,
+ &be_const_str_solidified,
+ ( &(const binstruction[51]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x1C0C0403, // 0001 EQ R3 R2 R3
+ 0x780E0001, // 0002 JMPF R3 #0005
+ 0xB80E0400, // 0003 GETNGBL R3 K2
+ 0x88080703, // 0004 GETMBR R2 R3 K3
+ 0x600C0004, // 0005 GETGBL R3 G4
+ 0x5C100200, // 0006 MOVE R4 R1
+ 0x7C0C0200, // 0007 CALL R3 1
+ 0x200C0757, // 0008 NE R3 R3 K87
+ 0x740E0004, // 0009 JMPT R3 #000F
+ 0x600C0004, // 000A GETGBL R3 G4
+ 0x5C100400, // 000B MOVE R4 R2
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x200C0701, // 000D NE R3 R3 K1
+ 0x780E0000, // 000E JMPF R3 #0010
+ 0xB0065358, // 000F RAISE 1 K41 K88
+ 0x4C0C0000, // 0010 LDNIL R3
+ 0x200C0403, // 0011 NE R3 R2 R3
+ 0x780E001E, // 0012 JMPF R3 #0032
+ 0xA40E0200, // 0013 IMPORT R3 K1
+ 0x8810014B, // 0014 GETMBR R4 R0 K75
+ 0x4C140000, // 0015 LDNIL R5
+ 0x1C100805, // 0016 EQ R4 R4 R5
+ 0x78120002, // 0017 JMPF R4 #001B
+ 0xB812B200, // 0018 GETNGBL R4 K89
+ 0x7C100000, // 0019 CALL R4 0
+ 0x90029604, // 001A SETMBR R0 K75 R4
+ 0x8C100712, // 001B GETMET R4 R3 K18
+ 0x5C180400, // 001C MOVE R6 R2
+ 0x581C0006, // 001D LDCONST R7 K6
+ 0x7C100600, // 001E CALL R4 3
+ 0x78120002, // 001F JMPF R4 #0023
+ 0x5411FFFD, // 0020 LDINT R4 -2
+ 0x40120804, // 0021 CONNECT R4 K4 R4
+ 0x94080404, // 0022 GETIDX R2 R2 R4
+ 0x8810014B, // 0023 GETMBR R4 R0 K75
+ 0x8C10095A, // 0024 GETMET R4 R4 K90
+ 0x5C180400, // 0025 MOVE R6 R2
+ 0x7C100400, // 0026 CALL R4 2
+ 0x78120007, // 0027 JMPF R4 #0030
+ 0xB8122800, // 0028 GETNGBL R4 K20
+ 0x60140018, // 0029 GETGBL R5 G24
+ 0x5818005B, // 002A LDCONST R6 K91
+ 0x5C1C0400, // 002B MOVE R7 R2
+ 0x7C140400, // 002C CALL R5 2
+ 0x58180050, // 002D LDCONST R6 K80
+ 0x7C100400, // 002E CALL R4 2
+ 0x70020001, // 002F JMP #0032
+ 0x8810014B, // 0030 GETMBR R4 R0 K75
+ 0x98100401, // 0031 SETIDX R4 R2 R1
+ 0x80000000, // 0032 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: wire_scan
+********************************************************************/
+be_local_closure(class_Tasmota_wire_scan, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_wire_scan,
+ &be_const_str_solidified,
+ ( &(const binstruction[33]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x200C0403, // 0001 NE R3 R2 R3
+ 0x780E0005, // 0002 JMPF R3 #0009
+ 0x8C0C015C, // 0003 GETMET R3 R0 K92
+ 0x5C140400, // 0004 MOVE R5 R2
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x740E0001, // 0006 JMPT R3 #0009
+ 0x4C0C0000, // 0007 LDNIL R3
+ 0x80040600, // 0008 RET 1 R3
+ 0x880C015D, // 0009 GETMBR R3 R0 K93
+ 0x8C0C075E, // 000A GETMET R3 R3 K94
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x780E0006, // 000C JMPF R3 #0014
+ 0x880C015D, // 000D GETMBR R3 R0 K93
+ 0x8C0C075F, // 000E GETMET R3 R3 K95
+ 0x5C140200, // 000F MOVE R5 R1
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x780E0001, // 0011 JMPF R3 #0014
+ 0x880C015D, // 0012 GETMBR R3 R0 K93
+ 0x80040600, // 0013 RET 1 R3
+ 0x880C0160, // 0014 GETMBR R3 R0 K96
+ 0x8C0C075E, // 0015 GETMET R3 R3 K94
+ 0x7C0C0200, // 0016 CALL R3 1
+ 0x780E0006, // 0017 JMPF R3 #001F
+ 0x880C0160, // 0018 GETMBR R3 R0 K96
+ 0x8C0C075F, // 0019 GETMET R3 R3 K95
+ 0x5C140200, // 001A MOVE R5 R1
+ 0x7C0C0400, // 001B CALL R3 2
+ 0x780E0001, // 001C JMPF R3 #001F
+ 0x880C0160, // 001D GETMBR R3 R0 K96
+ 0x80040600, // 001E RET 1 R3
+ 0x4C0C0000, // 001F LDNIL R3
+ 0x80040600, // 0020 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: urlfetch
+********************************************************************/
+be_local_closure(class_Tasmota_urlfetch, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_urlfetch,
+ &be_const_str_solidified,
+ ( &(const binstruction[48]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x1C0C0403, // 0001 EQ R3 R2 R3
+ 0x780E000D, // 0002 JMPF R3 #0011
+ 0xA40E0200, // 0003 IMPORT R3 K1
+ 0x8C100761, // 0004 GETMET R4 R3 K97
+ 0x5C180200, // 0005 MOVE R6 R1
+ 0x581C0005, // 0006 LDCONST R7 K5
+ 0x7C100600, // 0007 CALL R4 3
+ 0x8C10094A, // 0008 GETMET R4 R4 K74
+ 0x7C100200, // 0009 CALL R4 1
+ 0x5C080800, // 000A MOVE R2 R4
+ 0x6010000C, // 000B GETGBL R4 G12
+ 0x5C140400, // 000C MOVE R5 R2
+ 0x7C100200, // 000D CALL R4 1
+ 0x1C100904, // 000E EQ R4 R4 K4
+ 0x78120000, // 000F JMPF R4 #0011
+ 0x58080062, // 0010 LDCONST R2 K98
+ 0xB80EC600, // 0011 GETNGBL R3 K99
+ 0x7C0C0000, // 0012 CALL R3 0
+ 0x8C100764, // 0013 GETMET R4 R3 K100
+ 0x50180200, // 0014 LDBOOL R6 1 0
+ 0x7C100400, // 0015 CALL R4 2
+ 0x8C100765, // 0016 GETMET R4 R3 K101
+ 0x5C180200, // 0017 MOVE R6 R1
+ 0x7C100400, // 0018 CALL R4 2
+ 0x8C100766, // 0019 GETMET R4 R3 K102
+ 0x7C100200, // 001A CALL R4 1
+ 0x541600C7, // 001B LDINT R5 200
+ 0x20140805, // 001C NE R5 R4 R5
+ 0x78160004, // 001D JMPF R5 #0023
+ 0x60140008, // 001E GETGBL R5 G8
+ 0x5C180800, // 001F MOVE R6 R4
+ 0x7C140200, // 0020 CALL R5 1
+ 0x0016CE05, // 0021 ADD R5 K103 R5
+ 0xB006D005, // 0022 RAISE 1 K104 R5
+ 0x8C140769, // 0023 GETMET R5 R3 K105
+ 0x5C1C0400, // 0024 MOVE R7 R2
+ 0x7C140400, // 0025 CALL R5 2
+ 0x8C18070A, // 0026 GETMET R6 R3 K10
+ 0x7C180200, // 0027 CALL R6 1
+ 0x8C180114, // 0028 GETMET R6 R0 K20
+ 0x60200008, // 0029 GETGBL R8 G8
+ 0x5C240A00, // 002A MOVE R9 R5
+ 0x7C200200, // 002B CALL R8 1
+ 0x0022D408, // 002C ADD R8 K106 R8
+ 0x58240050, // 002D LDCONST R9 K80
+ 0x7C180600, // 002E CALL R6 3
+ 0x80040800, // 002F RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: run_deferred
+********************************************************************/
+be_local_closure(class_Tasmota_run_deferred, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_run_deferred,
+ &be_const_str_solidified,
+ ( &(const binstruction[26]) { /* code */
+ 0x8804016B, // 0000 GETMBR R1 R0 K107
+ 0x78060016, // 0001 JMPF R1 #0019
+ 0x6004000C, // 0002 GETGBL R1 G12
+ 0x8808016B, // 0003 GETMBR R2 R0 K107
+ 0x7C040200, // 0004 CALL R1 1
+ 0x24080304, // 0005 GT R2 R1 K4
+ 0x780A0009, // 0006 JMPF R2 #0011
+ 0x8808016B, // 0007 GETMBR R2 R0 K107
+ 0x94080504, // 0008 GETIDX R2 R2 K4
+ 0x880C016B, // 0009 GETMBR R3 R0 K107
+ 0x8C0C0731, // 000A GETMET R3 R3 K49
+ 0x58140004, // 000B LDCONST R5 K4
+ 0x7C0C0400, // 000C CALL R3 2
+ 0x0404032D, // 000D SUB R1 R1 K45
+ 0x5C0C0400, // 000E MOVE R3 R2
+ 0x7C0C0000, // 000F CALL R3 0
+ 0x7001FFF3, // 0010 JMP #0005
+ 0x6008000C, // 0011 GETGBL R2 G12
+ 0x880C016B, // 0012 GETMBR R3 R0 K107
+ 0x7C080200, // 0013 CALL R2 1
+ 0x1C080504, // 0014 EQ R2 R2 K4
+ 0x780A0002, // 0015 JMPF R2 #0019
+ 0xB80A0400, // 0016 GETNGBL R2 K2
+ 0x8808052B, // 0017 GETMBR R2 R2 K43
+ 0x900AD904, // 0018 SETMBR R2 K108 K4
+ 0x80000000, // 0019 RET 0
})
)
);
@@ -802,36 +1721,36 @@ be_local_closure(class_Tasmota_init, /* name */
&be_const_str_init,
&be_const_str_solidified,
( &(const binstruction[34]) { /* code */
- 0xB8065600, // 0000 GETNGBL R1 K43
- 0x8808012C, // 0001 GETMBR R2 R0 K44
- 0x880C012D, // 0002 GETMBR R3 R0 K45
+ 0xB806DA00, // 0000 GETNGBL R1 K109
+ 0x8808016E, // 0001 GETMBR R2 R0 K110
+ 0x880C016F, // 0002 GETMBR R3 R0 K111
0x7C040400, // 0003 CALL R1 2
- 0x90022401, // 0004 SETMBR R0 K18 R1
- 0xA4065C00, // 0005 IMPORT R1 K46
+ 0x90025601, // 0004 SETMBR R0 K43 R1
+ 0xA406E000, // 0005 IMPORT R1 K112
0x60080015, // 0006 GETGBL R2 G21
- 0x880C012F, // 0007 GETMBR R3 R0 K47
+ 0x880C0171, // 0007 GETMBR R3 R0 K113
0x54120003, // 0008 LDINT R4 4
0x7C080400, // 0009 CALL R2 2
- 0x8C080509, // 000A GETMET R2 R2 K9
- 0x58100001, // 000B LDCONST R4 K1
+ 0x8C080572, // 000A GETMET R2 R2 K114
+ 0x58100004, // 000B LDCONST R4 K4
0x54160003, // 000C LDINT R5 4
0x7C080600, // 000D CALL R2 3
0x780A0006, // 000E JMPF R2 #0016
- 0xB80E5600, // 000F GETNGBL R3 K43
- 0x8C100331, // 0010 GETMET R4 R1 K49
+ 0xB80EDA00, // 000F GETNGBL R3 K109
+ 0x8C100374, // 0010 GETMET R4 R1 K116
0x5C180400, // 0011 MOVE R6 R2
0x7C100400, // 0012 CALL R4 2
- 0x88140132, // 0013 GETMBR R5 R0 K50
+ 0x88140175, // 0013 GETMBR R5 R0 K117
0x7C0C0400, // 0014 CALL R3 2
- 0x90026003, // 0015 SETMBR R0 K48 R3
- 0x90026734, // 0016 SETMBR R0 K51 K52
- 0xB80E2400, // 0017 GETNGBL R3 K18
- 0x8C0C0736, // 0018 GETMET R3 R3 K54
- 0x58140037, // 0019 LDCONST R5 K55
+ 0x9002E603, // 0015 SETMBR R0 K115 R3
+ 0x90020707, // 0016 SETMBR R0 K3 K7
+ 0xB80E5600, // 0017 GETNGBL R3 K43
+ 0x8C0C075A, // 0018 GETMET R3 R3 K90
+ 0x58140077, // 0019 LDCONST R5 K119
0x7C0C0400, // 001A CALL R3 2
- 0x90026A03, // 001B SETMBR R0 K53 R3
- 0x8C0C0138, // 001C GETMET R3 R0 K56
- 0x58140039, // 001D LDCONST R5 K57
+ 0x9002EC03, // 001B SETMBR R0 K118 R3
+ 0x8C0C0178, // 001C GETMET R3 R0 K120
+ 0x58140079, // 001D LDCONST R5 K121
0x84180000, // 001E CLOSURE R6 P0
0x7C0C0600, // 001F CALL R3 3
0xA0000000, // 0020 CLOSE R0
@@ -843,247 +1762,9 @@ be_local_closure(class_Tasmota_init, /* name */
/********************************************************************
-** Solidified function: remove_driver
+** Solidified function: defer
********************************************************************/
-be_local_closure(class_Tasmota_remove_driver, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_remove_driver,
- &be_const_str_solidified,
- ( &(const binstruction[14]) { /* code */
- 0x8808011D, // 0000 GETMBR R2 R0 K29
- 0x780A000A, // 0001 JMPF R2 #000D
- 0x8808011D, // 0002 GETMBR R2 R0 K29
- 0x8C08051E, // 0003 GETMET R2 R2 K30
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x4C0C0000, // 0006 LDNIL R3
- 0x200C0403, // 0007 NE R3 R2 R3
- 0x780E0003, // 0008 JMPF R3 #000D
- 0x880C011D, // 0009 GETMBR R3 R0 K29
- 0x8C0C073A, // 000A GETMET R3 R3 K58
- 0x5C140400, // 000B MOVE R5 R2
- 0x7C0C0400, // 000C CALL R3 2
- 0x80000000, // 000D RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: compile
-********************************************************************/
-be_local_closure(class_Tasmota_compile, /* name */
- be_nested_proto(
- 12, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_compile,
- &be_const_str_solidified,
- ( &(const binstruction[85]) { /* code */
- 0xA40A7600, // 0000 IMPORT R2 K59
- 0x8C0C053C, // 0001 GETMET R3 R2 K60
- 0x5C140200, // 0002 MOVE R5 R1
- 0x5818003D, // 0003 LDCONST R6 K61
- 0x7C0C0600, // 0004 CALL R3 3
- 0x740E0007, // 0005 JMPT R3 #000E
- 0x600C0001, // 0006 GETGBL R3 G1
- 0x60100018, // 0007 GETGBL R4 G24
- 0x5814003E, // 0008 LDCONST R5 K62
- 0x5C180200, // 0009 MOVE R6 R1
- 0x7C100400, // 000A CALL R4 2
- 0x7C0C0200, // 000B CALL R3 1
- 0x500C0000, // 000C LDBOOL R3 0 0
- 0x80040600, // 000D RET 1 R3
- 0x8C0C051E, // 000E GETMET R3 R2 K30
- 0x5C140200, // 000F MOVE R5 R1
- 0x5818003F, // 0010 LDCONST R6 K63
- 0x7C0C0600, // 0011 CALL R3 3
- 0x240C0701, // 0012 GT R3 R3 K1
- 0x780E0006, // 0013 JMPF R3 #001B
- 0x600C0001, // 0014 GETGBL R3 G1
- 0x60100018, // 0015 GETGBL R4 G24
- 0x58140040, // 0016 LDCONST R5 K64
- 0x7C100200, // 0017 CALL R4 1
- 0x7C0C0200, // 0018 CALL R3 1
- 0x500C0000, // 0019 LDBOOL R3 0 0
- 0x80040600, // 001A RET 1 R3
- 0x4C0C0000, // 001B LDNIL R3
- 0xA8020012, // 001C EXBLK 0 #0030
- 0x6010000D, // 001D GETGBL R4 G13
- 0x5C140200, // 001E MOVE R5 R1
- 0x58180041, // 001F LDCONST R6 K65
- 0x501C0200, // 0020 LDBOOL R7 1 0
- 0x7C100600, // 0021 CALL R4 3
- 0x5C0C0800, // 0022 MOVE R3 R4
- 0x4C100000, // 0023 LDNIL R4
- 0x1C100604, // 0024 EQ R4 R3 R4
- 0x78120007, // 0025 JMPF R4 #002E
- 0x60100001, // 0026 GETGBL R4 G1
- 0x60140018, // 0027 GETGBL R5 G24
- 0x58180042, // 0028 LDCONST R6 K66
- 0x7C140200, // 0029 CALL R5 1
- 0x7C100200, // 002A CALL R4 1
- 0x50100000, // 002B LDBOOL R4 0 0
- 0xA8040001, // 002C EXBLK 1 1
- 0x80040800, // 002D RET 1 R4
- 0xA8040001, // 002E EXBLK 1 1
- 0x7002000D, // 002F JMP #003E
- 0xAC100002, // 0030 CATCH R4 0 2
- 0x7002000A, // 0031 JMP #003D
- 0x60180001, // 0032 GETGBL R6 G1
- 0x601C0018, // 0033 GETGBL R7 G24
- 0x58200043, // 0034 LDCONST R8 K67
- 0x5C240200, // 0035 MOVE R9 R1
- 0x5C280800, // 0036 MOVE R10 R4
- 0x5C2C0A00, // 0037 MOVE R11 R5
- 0x7C1C0800, // 0038 CALL R7 4
- 0x7C180200, // 0039 CALL R6 1
- 0x50180000, // 003A LDBOOL R6 0 0
- 0x80040C00, // 003B RET 1 R6
- 0x70020000, // 003C JMP #003E
- 0xB0080000, // 003D RAISE 2 R0 R0
- 0x00100344, // 003E ADD R4 R1 K68
- 0xA8020005, // 003F EXBLK 0 #0046
- 0x8C140145, // 0040 GETMET R5 R0 K69
- 0x5C1C0800, // 0041 MOVE R7 R4
- 0x5C200600, // 0042 MOVE R8 R3
- 0x7C140600, // 0043 CALL R5 3
- 0xA8040001, // 0044 EXBLK 1 1
- 0x7002000C, // 0045 JMP #0053
- 0xAC140001, // 0046 CATCH R5 0 1
- 0x70020009, // 0047 JMP #0052
- 0x60180001, // 0048 GETGBL R6 G1
- 0x601C0018, // 0049 GETGBL R7 G24
- 0x58200046, // 004A LDCONST R8 K70
- 0x5C240800, // 004B MOVE R9 R4
- 0x5C280A00, // 004C MOVE R10 R5
- 0x7C1C0600, // 004D CALL R7 3
- 0x7C180200, // 004E CALL R6 1
- 0x50180000, // 004F LDBOOL R6 0 0
- 0x80040C00, // 0050 RET 1 R6
- 0x70020000, // 0051 JMP #0053
- 0xB0080000, // 0052 RAISE 2 R0 R0
- 0x50140200, // 0053 LDBOOL R5 1 0
- 0x80040A00, // 0054 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_cmd
-********************************************************************/
-be_local_closure(class_Tasmota_add_cmd, /* name */
- be_nested_proto(
- 6, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_cmd,
- &be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
- 0x8C0C0127, // 0000 GETMET R3 R0 K39
- 0x5C140400, // 0001 MOVE R5 R2
- 0x7C0C0400, // 0002 CALL R3 2
- 0x880C0147, // 0003 GETMBR R3 R0 K71
- 0x4C100000, // 0004 LDNIL R4
- 0x1C0C0604, // 0005 EQ R3 R3 R4
- 0x780E0002, // 0006 JMPF R3 #000A
- 0x600C0013, // 0007 GETGBL R3 G19
- 0x7C0C0000, // 0008 CALL R3 0
- 0x90028E03, // 0009 SETMBR R0 K71 R3
- 0x600C0004, // 000A GETGBL R3 G4
- 0x5C100400, // 000B MOVE R4 R2
- 0x7C0C0200, // 000C CALL R3 1
- 0x1C0C0748, // 000D EQ R3 R3 K72
- 0x780E0002, // 000E JMPF R3 #0012
- 0x880C0147, // 000F GETMBR R3 R0 K71
- 0x980C0202, // 0010 SETIDX R3 R1 R2
- 0x70020000, // 0011 JMP #0013
- 0xB0063749, // 0012 RAISE 1 K27 K73
- 0x80000000, // 0013 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: run_timers
-********************************************************************/
-be_local_closure(class_Tasmota_run_timers, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_run_timers,
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x8C04014A, // 0000 GETMET R1 R0 K74
- 0x7C040200, // 0001 CALL R1 1
- 0x88040128, // 0002 GETMBR R1 R0 K40
- 0x78060015, // 0003 JMPF R1 #001A
- 0x58040001, // 0004 LDCONST R1 K1
- 0x88080128, // 0005 GETMBR R2 R0 K40
- 0x8C080502, // 0006 GETMET R2 R2 K2
- 0x7C080200, // 0007 CALL R2 1
- 0x14080202, // 0008 LT R2 R1 R2
- 0x780A000F, // 0009 JMPF R2 #001A
- 0x88080128, // 000A GETMBR R2 R0 K40
- 0x94080401, // 000B GETIDX R2 R2 R1
- 0x8C0C014B, // 000C GETMET R3 R0 K75
- 0x88140504, // 000D GETMBR R5 R2 K4
- 0x7C0C0400, // 000E CALL R3 2
- 0x780E0007, // 000F JMPF R3 #0018
- 0x880C0525, // 0010 GETMBR R3 R2 K37
- 0x88100128, // 0011 GETMBR R4 R0 K40
- 0x8C100916, // 0012 GETMET R4 R4 K22
- 0x5C180200, // 0013 MOVE R6 R1
- 0x7C100400, // 0014 CALL R4 2
- 0x5C100600, // 0015 MOVE R4 R3
- 0x7C100000, // 0016 CALL R4 0
- 0x70020000, // 0017 JMP #0019
- 0x00040305, // 0018 ADD R1 R1 K5
- 0x7001FFEA, // 0019 JMP #0005
- 0x80000000, // 001A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: remove_cmd
-********************************************************************/
-be_local_closure(class_Tasmota_remove_cmd, /* name */
+be_local_closure(class_Tasmota_defer, /* name */
be_nested_proto(
5, /* nstack */
2, /* argc */
@@ -1094,16 +1775,24 @@ be_local_closure(class_Tasmota_remove_cmd, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_remove_cmd,
+ &be_const_str_defer,
&be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x88080147, // 0000 GETMBR R2 R0 K71
- 0x780A0003, // 0001 JMPF R2 #0006
- 0x88080147, // 0002 GETMBR R2 R0 K71
- 0x8C080516, // 0003 GETMET R2 R2 K22
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x80000000, // 0006 RET 0
+ ( &(const binstruction[15]) { /* code */
+ 0x8808016B, // 0000 GETMBR R2 R0 K107
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x1C080403, // 0002 EQ R2 R2 R3
+ 0x780A0002, // 0003 JMPF R2 #0007
+ 0x60080012, // 0004 GETGBL R2 G18
+ 0x7C080000, // 0005 CALL R2 0
+ 0x9002D602, // 0006 SETMBR R0 K107 R2
+ 0x8808016B, // 0007 GETMBR R2 R0 K107
+ 0x8C08051D, // 0008 GETMET R2 R2 K29
+ 0x5C100200, // 0009 MOVE R4 R1
+ 0x7C080400, // 000A CALL R2 2
+ 0xB80A0400, // 000B GETNGBL R2 K2
+ 0x8808052B, // 000C GETMBR R2 R2 K43
+ 0x900AD92D, // 000D SETMBR R2 K108 K45
+ 0x80000000, // 000E RET 0
})
)
);
@@ -1111,11 +1800,11 @@ be_local_closure(class_Tasmota_remove_cmd, /* name */
/********************************************************************
-** Solidified function: remove_cron
+** Solidified function: next_cron
********************************************************************/
-be_local_closure(class_Tasmota_remove_cron, /* name */
+be_local_closure(class_Tasmota_next_cron, /* name */
be_nested_proto(
- 7, /* nstack */
+ 6, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -1124,323 +1813,26 @@ be_local_closure(class_Tasmota_remove_cron, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_remove_cron,
+ &be_const_str_next_cron,
&be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x780A000E, // 0001 JMPF R2 #0011
- 0x580C0001, // 0002 LDCONST R3 K1
- 0x8C100502, // 0003 GETMET R4 R2 K2
+ ( &(const binstruction[17]) { /* code */
+ 0x88080139, // 0000 GETMBR R2 R0 K57
+ 0x780A000D, // 0001 JMPF R2 #0010
+ 0x580C0004, // 0002 LDCONST R3 K4
+ 0x8C10052F, // 0003 GETMET R4 R2 K47
0x7C100200, // 0004 CALL R4 1
0x14100604, // 0005 LT R4 R3 R4
- 0x78120009, // 0006 JMPF R4 #0011
+ 0x78120008, // 0006 JMPF R4 #0010
0x94100403, // 0007 GETIDX R4 R2 R3
- 0x88100903, // 0008 GETMBR R4 R4 K3
+ 0x88100930, // 0008 GETMBR R4 R4 K48
0x1C100801, // 0009 EQ R4 R4 R1
- 0x78120003, // 000A JMPF R4 #000F
- 0x8C100516, // 000B GETMET R4 R2 K22
- 0x5C180600, // 000C MOVE R6 R3
- 0x7C100400, // 000D CALL R4 2
- 0x70020000, // 000E JMP #0010
- 0x000C0705, // 000F ADD R3 R3 K5
- 0x7001FFF1, // 0010 JMP #0003
- 0x80000000, // 0011 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: remove_fast_loop
-********************************************************************/
-be_local_closure(class_Tasmota_remove_fast_loop, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_remove_fast_loop,
- &be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x8808014C, // 0000 GETMBR R2 R0 K76
- 0x740A0000, // 0001 JMPT R2 #0003
- 0x80000400, // 0002 RET 0
- 0x8808014C, // 0003 GETMBR R2 R0 K76
- 0x8C08051E, // 0004 GETMET R2 R2 K30
- 0x5C100200, // 0005 MOVE R4 R1
- 0x7C080400, // 0006 CALL R2 2
- 0x4C0C0000, // 0007 LDNIL R3
- 0x200C0403, // 0008 NE R3 R2 R3
- 0x780E0003, // 0009 JMPF R3 #000E
- 0x880C014C, // 000A GETMBR R3 R0 K76
- 0x8C0C0716, // 000B GETMET R3 R3 K22
- 0x5C140400, // 000C MOVE R5 R2
- 0x7C0C0400, // 000D CALL R3 2
- 0x80000000, // 000E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: find_key_i
-********************************************************************/
-be_local_closure(class_Tasmota_find_key_i, /* name */
- be_nested_proto(
- 10, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_find_key_i,
- &be_const_str_solidified,
- ( &(const binstruction[30]) { /* code */
- 0xA40E7600, // 0000 IMPORT R3 K59
- 0x8C10074D, // 0001 GETMET R4 R3 K77
- 0x5C180400, // 0002 MOVE R6 R2
- 0x7C100400, // 0003 CALL R4 2
- 0x6014000F, // 0004 GETGBL R5 G15
- 0x5C180200, // 0005 MOVE R6 R1
- 0x601C0013, // 0006 GETGBL R7 G19
- 0x7C140400, // 0007 CALL R5 2
- 0x78160013, // 0008 JMPF R5 #001D
- 0x60140010, // 0009 GETGBL R5 G16
- 0x8C18034E, // 000A GETMET R6 R1 K78
- 0x7C180200, // 000B CALL R6 1
- 0x7C140200, // 000C CALL R5 1
- 0xA802000B, // 000D EXBLK 0 #001A
- 0x5C180A00, // 000E MOVE R6 R5
- 0x7C180000, // 000F CALL R6 0
- 0x8C1C074D, // 0010 GETMET R7 R3 K77
- 0x5C240C00, // 0011 MOVE R9 R6
- 0x7C1C0400, // 0012 CALL R7 2
- 0x1C1C0E04, // 0013 EQ R7 R7 R4
- 0x741E0001, // 0014 JMPT R7 #0017
- 0x1C1C054F, // 0015 EQ R7 R2 K79
- 0x781E0001, // 0016 JMPF R7 #0019
- 0xA8040001, // 0017 EXBLK 1 1
- 0x80040C00, // 0018 RET 1 R6
- 0x7001FFF3, // 0019 JMP #000E
- 0x58140050, // 001A LDCONST R5 K80
- 0xAC140200, // 001B CATCH R5 1 0
- 0xB0080000, // 001C RAISE 2 R0 R0
- 0x80000000, // 001D RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: check_not_method
-********************************************************************/
-be_local_closure(class_Tasmota_check_not_method, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_check_not_method,
- &be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0xA40A5C00, // 0000 IMPORT R2 K46
- 0x600C0004, // 0001 GETGBL R3 G4
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C0C0200, // 0003 CALL R3 1
- 0x200C0748, // 0004 NE R3 R3 K72
- 0x780E0000, // 0005 JMPF R3 #0007
- 0xB006A352, // 0006 RAISE 1 K81 K82
- 0x8C0C0553, // 0007 GETMET R3 R2 K83
- 0x5C140200, // 0008 MOVE R5 R1
- 0x7C0C0400, // 0009 CALL R3 2
- 0x50100200, // 000A LDBOOL R4 1 0
- 0x1C0C0604, // 000B EQ R3 R3 R4
- 0x780E0000, // 000C JMPF R3 #000E
- 0xB006A354, // 000D RAISE 1 K81 K84
- 0x80000000, // 000E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: when_network_up
-********************************************************************/
-be_local_closure(class_Tasmota_when_network_up, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_when_network_up,
- &be_const_str_solidified,
- ( &(const binstruction[23]) { /* code */
- 0x8C080127, // 0000 GETMET R2 R0 K39
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x8C080155, // 0003 GETMET R2 R0 K85
- 0x7C080200, // 0004 CALL R2 1
- 0x780A0002, // 0005 JMPF R2 #0009
- 0x5C080200, // 0006 MOVE R2 R1
- 0x7C080000, // 0007 CALL R2 0
- 0x7002000C, // 0008 JMP #0016
- 0x88080156, // 0009 GETMBR R2 R0 K86
- 0x4C0C0000, // 000A LDNIL R3
- 0x1C080403, // 000B EQ R2 R2 R3
- 0x780A0004, // 000C JMPF R2 #0012
- 0x60080012, // 000D GETGBL R2 G18
- 0x7C080000, // 000E CALL R2 0
- 0x400C0401, // 000F CONNECT R3 R2 R1
- 0x9002AC02, // 0010 SETMBR R0 K86 R2
- 0x70020003, // 0011 JMP #0016
- 0x88080156, // 0012 GETMBR R2 R0 K86
- 0x8C080511, // 0013 GETMET R2 R2 K17
- 0x5C100200, // 0014 MOVE R4 R1
- 0x7C080400, // 0015 CALL R2 2
- 0x80000000, // 0016 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_rule_once
-********************************************************************/
-be_local_closure(class_Tasmota_add_rule_once, /* name */
- be_nested_proto(
- 10, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_rule_once,
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x8C100157, // 0000 GETMET R4 R0 K87
- 0x5C180200, // 0001 MOVE R6 R1
- 0x5C1C0400, // 0002 MOVE R7 R2
- 0x5C200600, // 0003 MOVE R8 R3
- 0x50240200, // 0004 LDBOOL R9 1 0
- 0x7C100A00, // 0005 CALL R4 5
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: exec_cmd
-********************************************************************/
-be_local_closure(class_Tasmota_exec_cmd, /* name */
- be_nested_proto(
- 12, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_exec_cmd,
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x88100147, // 0000 GETMBR R4 R0 K71
- 0x78120016, // 0001 JMPF R4 #0019
- 0x8C100158, // 0002 GETMET R4 R0 K88
- 0x88180147, // 0003 GETMBR R6 R0 K71
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x7C100600, // 0005 CALL R4 3
- 0x4C140000, // 0006 LDNIL R5
- 0x20140805, // 0007 NE R5 R4 R5
- 0x7816000F, // 0008 JMPF R5 #0019
- 0xA4164000, // 0009 IMPORT R5 K32
- 0x8C180B21, // 000A GETMET R6 R5 K33
- 0x5C200600, // 000B MOVE R8 R3
- 0x7C180400, // 000C CALL R6 2
- 0x8C1C0159, // 000D GETMET R7 R0 K89
- 0x5C240800, // 000E MOVE R9 R4
- 0x7C1C0400, // 000F CALL R7 2
- 0x881C0147, // 0010 GETMBR R7 R0 K71
- 0x941C0E04, // 0011 GETIDX R7 R7 R4
- 0x5C200800, // 0012 MOVE R8 R4
- 0x5C240400, // 0013 MOVE R9 R2
- 0x5C280600, // 0014 MOVE R10 R3
- 0x5C2C0C00, // 0015 MOVE R11 R6
- 0x7C1C0800, // 0016 CALL R7 4
- 0x501C0200, // 0017 LDBOOL R7 1 0
- 0x80040E00, // 0018 RET 1 R7
- 0x50100000, // 0019 LDBOOL R4 0 0
- 0x80040800, // 001A RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_light
-********************************************************************/
-be_local_closure(class_Tasmota_set_light, /* name */
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_set_light,
- &be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x600C0001, // 0000 GETGBL R3 G1
- 0x5810005A, // 0001 LDCONST R4 K90
- 0x7C0C0200, // 0002 CALL R3 1
- 0xA40E1000, // 0003 IMPORT R3 K8
- 0x4C100000, // 0004 LDNIL R4
- 0x20100404, // 0005 NE R4 R2 R4
- 0x78120005, // 0006 JMPF R4 #000D
- 0x8C10075B, // 0007 GETMET R4 R3 K91
- 0x5C180200, // 0008 MOVE R6 R1
- 0x5C1C0400, // 0009 MOVE R7 R2
- 0x7C100600, // 000A CALL R4 3
- 0x80040800, // 000B RET 1 R4
- 0x70020003, // 000C JMP #0011
- 0x8C10075B, // 000D GETMET R4 R3 K91
- 0x5C180200, // 000E MOVE R6 R1
- 0x7C100400, // 000F CALL R4 2
- 0x80040800, // 0010 RET 1 R4
- 0x80000000, // 0011 RET 0
+ 0x78120002, // 000A JMPF R4 #000E
+ 0x94100403, // 000B GETIDX R4 R2 R3
+ 0x8810093C, // 000C GETMBR R4 R4 K60
+ 0x80040800, // 000D RET 1 R4
+ 0x000C072D, // 000E ADD R3 R3 K45
+ 0x7001FFF2, // 000F JMP #0003
+ 0x80000000, // 0010 RET 0
})
)
);
@@ -1464,11 +1856,11 @@ be_local_closure(class_Tasmota_fast_loop, /* name */
&be_const_str_fast_loop,
&be_const_str_solidified,
( &(const binstruction[15]) { /* code */
- 0x8804014C, // 0000 GETMBR R1 R0 K76
+ 0x88040127, // 0000 GETMBR R1 R0 K39
0x5C080200, // 0001 MOVE R2 R1
0x740A0000, // 0002 JMPT R2 #0004
0x80000400, // 0003 RET 0
- 0x58080001, // 0004 LDCONST R2 K1
+ 0x58080004, // 0004 LDCONST R2 K4
0x600C000C, // 0005 GETGBL R3 G12
0x5C100200, // 0006 MOVE R4 R1
0x7C0C0200, // 0007 CALL R3 1
@@ -1476,7 +1868,7 @@ be_local_closure(class_Tasmota_fast_loop, /* name */
0x780E0003, // 0009 JMPF R3 #000E
0x940C0202, // 000A GETIDX R3 R1 R2
0x7C0C0000, // 000B CALL R3 0
- 0x00080505, // 000C ADD R2 R2 K5
+ 0x0008052D, // 000C ADD R2 R2 K45
0x7001FFF6, // 000D JMP #0005
0x80000000, // 000E RET 0
})
@@ -1486,118 +1878,11 @@ be_local_closure(class_Tasmota_fast_loop, /* name */
/********************************************************************
-** Solidified function: run_cron
+** Solidified function: unload_extension
********************************************************************/
-be_local_closure(class_Tasmota_run_cron, /* name */
- be_nested_proto(
- 9, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_run_cron,
- &be_const_str_solidified,
- ( &(const binstruction[34]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x7806001E, // 0001 JMPF R1 #0021
- 0x58040001, // 0002 LDCONST R1 K1
- 0xB80AB800, // 0003 GETNGBL R2 K92
- 0x8C08055D, // 0004 GETMET R2 R2 K93
- 0x7C080200, // 0005 CALL R2 1
- 0x880C0100, // 0006 GETMBR R3 R0 K0
- 0x8C0C0702, // 0007 GETMET R3 R3 K2
- 0x7C0C0200, // 0008 CALL R3 1
- 0x140C0203, // 0009 LT R3 R1 R3
- 0x780E0015, // 000A JMPF R3 #0021
- 0x880C0100, // 000B GETMBR R3 R0 K0
- 0x940C0601, // 000C GETIDX R3 R3 R1
- 0x88100704, // 000D GETMBR R4 R3 K4
- 0x1C100901, // 000E EQ R4 R4 K1
- 0x78120003, // 000F JMPF R4 #0014
- 0x8C10075E, // 0010 GETMET R4 R3 K94
- 0x7C100200, // 0011 CALL R4 1
- 0x900E0804, // 0012 SETMBR R3 K4 R4
- 0x7002000A, // 0013 JMP #001F
- 0x8C10074B, // 0014 GETMET R4 R3 K75
- 0x7C100200, // 0015 CALL R4 1
- 0x78120007, // 0016 JMPF R4 #001F
- 0x88100725, // 0017 GETMBR R4 R3 K37
- 0x8C14075E, // 0018 GETMET R5 R3 K94
- 0x7C140200, // 0019 CALL R5 1
- 0x900E0805, // 001A SETMBR R3 K4 R5
- 0x5C180800, // 001B MOVE R6 R4
- 0x5C1C0400, // 001C MOVE R7 R2
- 0x5C200A00, // 001D MOVE R8 R5
- 0x7C180400, // 001E CALL R6 2
- 0x00040305, // 001F ADD R1 R1 K5
- 0x7001FFE4, // 0020 JMP #0006
- 0x80000000, // 0021 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: cmd
-********************************************************************/
-be_local_closure(class_Tasmota_cmd, /* name */
+be_local_closure(class_Tasmota_unload_extension, /* name */
be_nested_proto(
8, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_cmd,
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x880C011F, // 0000 GETMBR R3 R0 K31
- 0x50100200, // 0001 LDBOOL R4 1 0
- 0x90023E04, // 0002 SETMBR R0 K31 R4
- 0xB8121400, // 0003 GETNGBL R4 K10
- 0x88100912, // 0004 GETMBR R4 R4 K18
- 0x8810095F, // 0005 GETMBR R4 R4 K95
- 0x780A0004, // 0006 JMPF R2 #000C
- 0x28140918, // 0007 GE R5 R4 K24
- 0x78160002, // 0008 JMPF R5 #000C
- 0xB8161400, // 0009 GETNGBL R5 K10
- 0x88140B12, // 000A GETMBR R5 R5 K18
- 0x9016BF05, // 000B SETMBR R5 K95 K5
- 0x8C140160, // 000C GETMET R5 R0 K96
- 0x5C1C0200, // 000D MOVE R7 R1
- 0x7C140400, // 000E CALL R5 2
- 0x4C140000, // 000F LDNIL R5
- 0x8818011F, // 0010 GETMBR R6 R0 K31
- 0x501C0200, // 0011 LDBOOL R7 1 0
- 0x20180C07, // 0012 NE R6 R6 R7
- 0x781A0000, // 0013 JMPF R6 #0015
- 0x8814011F, // 0014 GETMBR R5 R0 K31
- 0x90023E03, // 0015 SETMBR R0 K31 R3
- 0x780A0002, // 0016 JMPF R2 #001A
- 0xB81A1400, // 0017 GETNGBL R6 K10
- 0x88180D12, // 0018 GETMBR R6 R6 K18
- 0x901ABE04, // 0019 SETMBR R6 K95 R4
- 0x80040A00, // 001A RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: time_str
-********************************************************************/
-be_local_closure(class_Tasmota_time_str, /* name */
- be_nested_proto(
- 11, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -1606,22 +1891,47 @@ be_local_closure(class_Tasmota_time_str, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_time_str,
+ &be_const_str_unload_extension,
&be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
- 0x8C080161, // 0000 GETMET R2 R0 K97
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x600C0018, // 0003 GETGBL R3 G24
- 0x58100062, // 0004 LDCONST R4 K98
- 0x94140563, // 0005 GETIDX R5 R2 K99
- 0x94180564, // 0006 GETIDX R6 R2 K100
- 0x941C0565, // 0007 GETIDX R7 R2 K101
- 0x94200566, // 0008 GETIDX R8 R2 K102
- 0x94240567, // 0009 GETIDX R9 R2 K103
- 0x94280568, // 000A GETIDX R10 R2 K104
- 0x7C0C0E00, // 000B CALL R3 7
- 0x80040600, // 000C RET 1 R3
+ ( &(const binstruction[38]) { /* code */
+ 0x8808014B, // 0000 GETMBR R2 R0 K75
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x1C080403, // 0002 EQ R2 R2 R3
+ 0x780A0000, // 0003 JMPF R2 #0005
+ 0x80000400, // 0004 RET 0
+ 0x5C080200, // 0005 MOVE R2 R1
+ 0x600C0004, // 0006 GETGBL R3 G4
+ 0x5C100200, // 0007 MOVE R4 R1
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0x1C0C0701, // 0009 EQ R3 R3 K1
+ 0x780E0004, // 000A JMPF R3 #0010
+ 0x880C014B, // 000B GETMBR R3 R0 K75
+ 0x8C0C070C, // 000C GETMET R3 R3 K12
+ 0x5C140200, // 000D MOVE R5 R1
+ 0x7C0C0400, // 000E CALL R3 2
+ 0x5C080600, // 000F MOVE R2 R3
+ 0x600C0004, // 0010 GETGBL R3 G4
+ 0x5C100400, // 0011 MOVE R4 R2
+ 0x7C0C0200, // 0012 CALL R3 1
+ 0x1C0C0757, // 0013 EQ R3 R3 K87
+ 0x780E000A, // 0014 JMPF R3 #0020
+ 0xA40EE000, // 0015 IMPORT R3 K112
+ 0x8C10075A, // 0016 GETMET R4 R3 K90
+ 0x5C180400, // 0017 MOVE R6 R2
+ 0x581C007A, // 0018 LDCONST R7 K122
+ 0x7C100600, // 0019 CALL R4 3
+ 0x78120001, // 001A JMPF R4 #001D
+ 0x8C10057A, // 001B GETMET R4 R2 K122
+ 0x7C100200, // 001C CALL R4 1
+ 0x8C10017B, // 001D GETMET R4 R0 K123
+ 0x5C180400, // 001E MOVE R6 R2
+ 0x7C100400, // 001F CALL R4 2
+ 0x4C040000, // 0020 LDNIL R1
+ 0x4C080000, // 0021 LDNIL R2
+ 0xB80E0400, // 0022 GETNGBL R3 K2
+ 0x8C0C077C, // 0023 GETMET R3 R3 K124
+ 0x7C0C0200, // 0024 CALL R3 1
+ 0x80000000, // 0025 RET 0
})
)
);
@@ -1629,202 +1939,11 @@ be_local_closure(class_Tasmota_time_str, /* name */
/********************************************************************
-** Solidified function: event
+** Solidified function: get_light
********************************************************************/
-be_local_closure(class_Tasmota_event, /* name */
- be_nested_proto(
- 19, /* nstack */
- 6, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_event,
- &be_const_str_solidified,
- ( &(const binstruction[112]) { /* code */
- 0x1C180369, // 0000 EQ R6 R1 K105
- 0x781A0005, // 0001 JMPF R6 #0008
- 0x88180156, // 0002 GETMBR R6 R0 K86
- 0x781A0001, // 0003 JMPF R6 #0006
- 0x8C18016A, // 0004 GETMET R6 R0 K106
- 0x7C180200, // 0005 CALL R6 1
- 0x8C18016B, // 0006 GETMET R6 R0 K107
- 0x7C180200, // 0007 CALL R6 1
- 0x1C18036C, // 0008 EQ R6 R1 K108
- 0x781A0001, // 0009 JMPF R6 #000C
- 0x8C18016D, // 000A GETMET R6 R0 K109
- 0x7C180200, // 000B CALL R6 1
- 0x50180000, // 000C LDBOOL R6 0 0
- 0x501C0000, // 000D LDBOOL R7 0 0
- 0x1C20036E, // 000E EQ R8 R1 K110
- 0x78220000, // 000F JMPF R8 #0011
- 0x501C0200, // 0010 LDBOOL R7 1 0
- 0x1C20036F, // 0011 EQ R8 R1 K111
- 0x78220006, // 0012 JMPF R8 #001A
- 0x8C200170, // 0013 GETMET R8 R0 K112
- 0x5C280400, // 0014 MOVE R10 R2
- 0x5C2C0600, // 0015 MOVE R11 R3
- 0x5C300800, // 0016 MOVE R12 R4
- 0x7C200800, // 0017 CALL R8 4
- 0x80041000, // 0018 RET 1 R8
- 0x7002004F, // 0019 JMP #006A
- 0x1C200371, // 001A EQ R8 R1 K113
- 0x78220004, // 001B JMPF R8 #0021
- 0x8C200172, // 001C GETMET R8 R0 K114
- 0x5C280800, // 001D MOVE R10 R4
- 0x7C200400, // 001E CALL R8 2
- 0x80041000, // 001F RET 1 R8
- 0x70020048, // 0020 JMP #006A
- 0x1C200315, // 0021 EQ R8 R1 K21
- 0x78220007, // 0022 JMPF R8 #002B
- 0x8C200173, // 0023 GETMET R8 R0 K115
- 0x5C280800, // 0024 MOVE R10 R4
- 0x602C0017, // 0025 GETGBL R11 G23
- 0x5C300600, // 0026 MOVE R12 R3
- 0x7C2C0200, // 0027 CALL R11 1
- 0x7C200600, // 0028 CALL R8 3
- 0x80041000, // 0029 RET 1 R8
- 0x7002003E, // 002A JMP #006A
- 0x1C200374, // 002B EQ R8 R1 K116
- 0x78220003, // 002C JMPF R8 #0031
- 0x8C200174, // 002D GETMET R8 R0 K116
- 0x7C200200, // 002E CALL R8 1
- 0x80041000, // 002F RET 1 R8
- 0x70020038, // 0030 JMP #006A
- 0x8820011D, // 0031 GETMBR R8 R0 K29
- 0x78220036, // 0032 JMPF R8 #006A
- 0xA4225C00, // 0033 IMPORT R8 K46
- 0x58240001, // 0034 LDCONST R9 K1
- 0x6028000C, // 0035 GETGBL R10 G12
- 0x882C011D, // 0036 GETMBR R11 R0 K29
- 0x7C280200, // 0037 CALL R10 1
- 0x1428120A, // 0038 LT R10 R9 R10
- 0x782A002F, // 0039 JMPF R10 #006A
- 0x8828011D, // 003A GETMBR R10 R0 K29
- 0x94281409, // 003B GETIDX R10 R10 R9
- 0x8C2C1109, // 003C GETMET R11 R8 K9
- 0x5C341400, // 003D MOVE R13 R10
- 0x5C380200, // 003E MOVE R14 R1
- 0x7C2C0600, // 003F CALL R11 3
- 0x60300004, // 0040 GETGBL R12 G4
- 0x5C341600, // 0041 MOVE R13 R11
- 0x7C300200, // 0042 CALL R12 1
- 0x1C301948, // 0043 EQ R12 R12 K72
- 0x78320022, // 0044 JMPF R12 #0068
- 0xA8020011, // 0045 EXBLK 0 #0058
- 0x5C301600, // 0046 MOVE R12 R11
- 0x5C341400, // 0047 MOVE R13 R10
- 0x5C380400, // 0048 MOVE R14 R2
- 0x5C3C0600, // 0049 MOVE R15 R3
- 0x5C400800, // 004A MOVE R16 R4
- 0x5C440A00, // 004B MOVE R17 R5
- 0x7C300A00, // 004C CALL R12 5
- 0x74320001, // 004D JMPT R12 #0050
- 0x741A0000, // 004E JMPT R6 #0050
- 0x50180001, // 004F LDBOOL R6 0 1
- 0x50180200, // 0050 LDBOOL R6 1 0
- 0x781A0003, // 0051 JMPF R6 #0056
- 0x5C300E00, // 0052 MOVE R12 R7
- 0x74320001, // 0053 JMPT R12 #0056
- 0xA8040001, // 0054 EXBLK 1 1
- 0x70020013, // 0055 JMP #006A
- 0xA8040001, // 0056 EXBLK 1 1
- 0x7002000F, // 0057 JMP #0068
- 0xAC300002, // 0058 CATCH R12 0 2
- 0x7002000C, // 0059 JMP #0067
- 0x60380001, // 005A GETGBL R14 G1
- 0x603C0018, // 005B GETGBL R15 G24
- 0x58400075, // 005C LDCONST R16 K117
- 0x5C441800, // 005D MOVE R17 R12
- 0x5C481A00, // 005E MOVE R18 R13
- 0x7C3C0600, // 005F CALL R15 3
- 0x7C380200, // 0060 CALL R14 1
- 0x88380135, // 0061 GETMBR R14 R0 K53
- 0x783A0002, // 0062 JMPF R14 #0066
- 0xA43A6E00, // 0063 IMPORT R14 K55
- 0x8C3C1D76, // 0064 GETMET R15 R14 K118
- 0x7C3C0200, // 0065 CALL R15 1
- 0x70020000, // 0066 JMP #0068
- 0xB0080000, // 0067 RAISE 2 R0 R0
- 0x00241305, // 0068 ADD R9 R9 K5
- 0x7001FFCA, // 0069 JMP #0035
- 0x1C200377, // 006A EQ R8 R1 K119
- 0x78220002, // 006B JMPF R8 #006F
- 0xA422F000, // 006C IMPORT R8 K120
- 0x8C241145, // 006D GETMET R9 R8 K69
- 0x7C240200, // 006E CALL R9 1
- 0x80040C00, // 006F RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: wire_scan
-********************************************************************/
-be_local_closure(class_Tasmota_wire_scan, /* name */
+be_local_closure(class_Tasmota_get_light, /* name */
be_nested_proto(
6, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_wire_scan,
- &be_const_str_solidified,
- ( &(const binstruction[33]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x200C0403, // 0001 NE R3 R2 R3
- 0x780E0005, // 0002 JMPF R3 #0009
- 0x8C0C0179, // 0003 GETMET R3 R0 K121
- 0x5C140400, // 0004 MOVE R5 R2
- 0x7C0C0400, // 0005 CALL R3 2
- 0x740E0001, // 0006 JMPT R3 #0009
- 0x4C0C0000, // 0007 LDNIL R3
- 0x80040600, // 0008 RET 1 R3
- 0x880C017A, // 0009 GETMBR R3 R0 K122
- 0x8C0C077B, // 000A GETMET R3 R3 K123
- 0x7C0C0200, // 000B CALL R3 1
- 0x780E0006, // 000C JMPF R3 #0014
- 0x880C017A, // 000D GETMBR R3 R0 K122
- 0x8C0C077C, // 000E GETMET R3 R3 K124
- 0x5C140200, // 000F MOVE R5 R1
- 0x7C0C0400, // 0010 CALL R3 2
- 0x780E0001, // 0011 JMPF R3 #0014
- 0x880C017A, // 0012 GETMBR R3 R0 K122
- 0x80040600, // 0013 RET 1 R3
- 0x880C017D, // 0014 GETMBR R3 R0 K125
- 0x8C0C077B, // 0015 GETMET R3 R3 K123
- 0x7C0C0200, // 0016 CALL R3 1
- 0x780E0006, // 0017 JMPF R3 #001F
- 0x880C017D, // 0018 GETMBR R3 R0 K125
- 0x8C0C077C, // 0019 GETMET R3 R3 K124
- 0x5C140200, // 001A MOVE R5 R1
- 0x7C0C0400, // 001B CALL R3 2
- 0x780E0001, // 001C JMPF R3 #001F
- 0x880C017D, // 001D GETMBR R3 R0 K125
- 0x80040600, // 001E RET 1 R3
- 0x4C0C0000, // 001F LDNIL R3
- 0x80040600, // 0020 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: exec_tele
-********************************************************************/
-be_local_closure(class_Tasmota_exec_tele, /* name */
- be_nested_proto(
- 12, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -1833,239 +1952,25 @@ be_local_closure(class_Tasmota_exec_tele, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_exec_tele,
+ &be_const_str_get_light,
&be_const_str_solidified,
- ( &(const binstruction[41]) { /* code */
- 0x88080114, // 0000 GETMBR R2 R0 K20
- 0x780A0024, // 0001 JMPF R2 #0027
- 0xA40A4000, // 0002 IMPORT R2 K32
- 0x8C0C0521, // 0003 GETMET R3 R2 K33
- 0x5C140200, // 0004 MOVE R5 R1
- 0x7C0C0400, // 0005 CALL R3 2
- 0x50100000, // 0006 LDBOOL R4 0 0
- 0x4C140000, // 0007 LDNIL R5
- 0x1C140605, // 0008 EQ R5 R3 R5
- 0x78160004, // 0009 JMPF R5 #000F
- 0x8C140122, // 000A GETMET R5 R0 K34
- 0x001E4601, // 000B ADD R7 K35 R1
- 0x58200019, // 000C LDCONST R8 K25
- 0x7C140600, // 000D CALL R5 3
- 0x5C0C0200, // 000E MOVE R3 R1
- 0x60140013, // 000F GETGBL R5 G19
- 0x7C140000, // 0010 CALL R5 0
- 0x9816FC03, // 0011 SETIDX R5 K126 R3
- 0x5C0C0A00, // 0012 MOVE R3 R5
- 0x58140001, // 0013 LDCONST R5 K1
- 0x6018000C, // 0014 GETGBL R6 G12
- 0x881C0114, // 0015 GETMBR R7 R0 K20
- 0x7C180200, // 0016 CALL R6 1
- 0x14180A06, // 0017 LT R6 R5 R6
- 0x781A000C, // 0018 JMPF R6 #0026
- 0x88180114, // 0019 GETMBR R6 R0 K20
- 0x94180C05, // 001A GETIDX R6 R6 R5
- 0x8C1C0124, // 001B GETMET R7 R0 K36
- 0x5C240600, // 001C MOVE R9 R3
- 0x88280D04, // 001D GETMBR R10 R6 K4
- 0x882C0D25, // 001E GETMBR R11 R6 K37
- 0x7C1C0800, // 001F CALL R7 4
- 0x741E0001, // 0020 JMPT R7 #0023
- 0x74120000, // 0021 JMPT R4 #0023
- 0x50100001, // 0022 LDBOOL R4 0 1
- 0x50100200, // 0023 LDBOOL R4 1 0
- 0x00140B05, // 0024 ADD R5 R5 K5
- 0x7001FFED, // 0025 JMP #0014
- 0x80040800, // 0026 RET 1 R4
- 0x50080000, // 0027 LDBOOL R2 0 0
- 0x80040400, // 0028 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_rule
-********************************************************************/
-be_local_closure(class_Tasmota_add_rule, /* name */
- be_nested_proto(
- 12, /* nstack */
- 5, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_rule,
- &be_const_str_solidified,
- ( &(const binstruction[37]) { /* code */
- 0x8C140127, // 0000 GETMET R5 R0 K39
- 0x5C1C0400, // 0001 MOVE R7 R2
- 0x7C140400, // 0002 CALL R5 2
- 0x88140114, // 0003 GETMBR R5 R0 K20
- 0x4C180000, // 0004 LDNIL R6
- 0x1C140A06, // 0005 EQ R5 R5 R6
- 0x78160002, // 0006 JMPF R5 #000A
- 0x60140012, // 0007 GETGBL R5 G18
- 0x7C140000, // 0008 CALL R5 0
- 0x90022805, // 0009 SETMBR R0 K20 R5
- 0x60140004, // 000A GETGBL R5 G4
- 0x5C180400, // 000B MOVE R6 R2
- 0x7C140200, // 000C CALL R5 1
- 0x1C140B48, // 000D EQ R5 R5 K72
- 0x78160013, // 000E JMPF R5 #0023
- 0x4C140000, // 000F LDNIL R5
- 0x20140605, // 0010 NE R5 R3 R5
- 0x78160003, // 0011 JMPF R5 #0016
- 0x8C14017F, // 0012 GETMET R5 R0 K127
- 0x5C1C0200, // 0013 MOVE R7 R1
- 0x5C200600, // 0014 MOVE R8 R3
- 0x7C140600, // 0015 CALL R5 3
- 0x88140114, // 0016 GETMBR R5 R0 K20
- 0x8C140B11, // 0017 GETMET R5 R5 K17
- 0xB81E5200, // 0018 GETNGBL R7 K41
- 0x88200180, // 0019 GETMBR R8 R0 K128
- 0x8C201181, // 001A GETMET R8 R8 K129
- 0x5C280200, // 001B MOVE R10 R1
- 0x7C200400, // 001C CALL R8 2
- 0x5C240400, // 001D MOVE R9 R2
- 0x5C280600, // 001E MOVE R10 R3
- 0x5C2C0800, // 001F MOVE R11 R4
- 0x7C1C0800, // 0020 CALL R7 4
- 0x7C140400, // 0021 CALL R5 2
- 0x70020000, // 0022 JMP #0024
- 0xB0063749, // 0023 RAISE 1 K27 K73
- 0x80000000, // 0024 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_fast_loop
-********************************************************************/
-be_local_closure(class_Tasmota_add_fast_loop, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_fast_loop,
- &be_const_str_solidified,
- ( &(const binstruction[23]) { /* code */
- 0x8C080127, // 0000 GETMET R2 R0 K39
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x8808014C, // 0003 GETMBR R2 R0 K76
- 0x4C0C0000, // 0004 LDNIL R3
- 0x1C080403, // 0005 EQ R2 R2 R3
- 0x780A0002, // 0006 JMPF R2 #000A
- 0x60080012, // 0007 GETGBL R2 G18
- 0x7C080000, // 0008 CALL R2 0
- 0x90029802, // 0009 SETMBR R0 K76 R2
- 0x60080004, // 000A GETGBL R2 G4
- 0x5C0C0200, // 000B MOVE R3 R1
- 0x7C080200, // 000C CALL R2 1
- 0x20080548, // 000D NE R2 R2 K72
- 0x780A0000, // 000E JMPF R2 #0010
- 0xB0063782, // 000F RAISE 1 K27 K130
- 0x88080112, // 0010 GETMBR R2 R0 K18
- 0x900B0705, // 0011 SETMBR R2 K131 K5
- 0x8808014C, // 0012 GETMBR R2 R0 K76
- 0x8C080511, // 0013 GETMET R2 R2 K17
- 0x5C100200, // 0014 MOVE R4 R1
- 0x7C080400, // 0015 CALL R2 2
- 0x80000000, // 0016 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: gc
-********************************************************************/
-be_local_closure(class_Tasmota_gc, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_gc,
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0xA406E800, // 0000 IMPORT R1 K116
- 0x8C080384, // 0001 GETMET R2 R1 K132
+ ( &(const binstruction[16]) { /* code */
+ 0x60080001, // 0000 GETGBL R2 G1
+ 0x580C007D, // 0001 LDCONST R3 K125
0x7C080200, // 0002 CALL R2 1
- 0x8C080385, // 0003 GETMET R2 R1 K133
- 0x7C080200, // 0004 CALL R2 1
- 0x80040400, // 0005 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: find_op
-********************************************************************/
-be_local_closure(class_Tasmota_find_op, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_find_op,
- &be_const_str_solidified,
- ( &(const binstruction[31]) { /* code */
- 0x8C080186, // 0000 GETMET R2 R0 K134
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x280C0501, // 0003 GE R3 R2 K1
- 0x780E0011, // 0004 JMPF R3 #0017
- 0x540E7FFE, // 0005 LDINT R3 32767
- 0x2C0C0403, // 0006 AND R3 R2 R3
- 0x5412000F, // 0007 LDINT R4 16
- 0x3C100404, // 0008 SHR R4 R2 R4
- 0x60140012, // 0009 GETGBL R5 G18
- 0x7C140000, // 000A CALL R5 0
- 0x04180705, // 000B SUB R6 R3 K5
- 0x401A0206, // 000C CONNECT R6 K1 R6
- 0x94180206, // 000D GETIDX R6 R1 R6
- 0x40180A06, // 000E CONNECT R6 R5 R6
- 0x04180905, // 000F SUB R6 R4 K5
- 0x40180606, // 0010 CONNECT R6 R3 R6
- 0x94180206, // 0011 GETIDX R6 R1 R6
- 0x40180A06, // 0012 CONNECT R6 R5 R6
- 0x40180987, // 0013 CONNECT R6 R4 K135
- 0x94180206, // 0014 GETIDX R6 R1 R6
- 0x40180A06, // 0015 CONNECT R6 R5 R6
- 0x80040A00, // 0016 RET 1 R5
- 0x600C0012, // 0017 GETGBL R3 G18
- 0x7C0C0000, // 0018 CALL R3 0
- 0x40100601, // 0019 CONNECT R4 R3 R1
- 0x4C100000, // 001A LDNIL R4
- 0x40100604, // 001B CONNECT R4 R3 R4
- 0x4C100000, // 001C LDNIL R4
- 0x40100604, // 001D CONNECT R4 R3 R4
- 0x80040600, // 001E RET 1 R3
+ 0xA40A6E00, // 0003 IMPORT R2 K55
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x200C0203, // 0005 NE R3 R1 R3
+ 0x780E0004, // 0006 JMPF R3 #000C
+ 0x8C0C0572, // 0007 GETMET R3 R2 K114
+ 0x5C140200, // 0008 MOVE R5 R1
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x80040600, // 000A RET 1 R3
+ 0x70020002, // 000B JMP #000F
+ 0x8C0C0572, // 000C GETMET R3 R2 K114
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x80040600, // 000E RET 1 R3
+ 0x80000000, // 000F RET 0
})
)
);
@@ -2348,178 +2253,183 @@ be_local_closure(class_Tasmota_load, /* name */
&be_ktab_class_Tasmota, /* shared constants */
&be_const_str_load,
&be_const_str_solidified,
- ( &(const binstruction[171]) { /* code */
+ ( &(const binstruction[176]) { /* code */
0x84080000, // 0000 CLOSURE R2 P0
0x840C0001, // 0001 CLOSURE R3 P1
0x84100002, // 0002 CLOSURE R4 P2
0x84140003, // 0003 CLOSURE R5 P3
0x84180004, // 0004 CLOSURE R6 P4
0x841C0005, // 0005 CLOSURE R7 P5
- 0xA4227600, // 0006 IMPORT R8 K59
- 0xA4271000, // 0007 IMPORT R9 K136
+ 0xA4220200, // 0006 IMPORT R8 K1
+ 0xA426FC00, // 0007 IMPORT R9 K126
0x6028000C, // 0008 GETGBL R10 G12
0x5C2C0200, // 0009 MOVE R11 R1
0x7C280200, // 000A CALL R10 1
- 0x1C281501, // 000B EQ R10 R10 K1
+ 0x1C281504, // 000B EQ R10 R10 K4
0x782A0002, // 000C JMPF R10 #0010
0x50280000, // 000D LDBOOL R10 0 0
0xA0000000, // 000E CLOSE R0
0x80041400, // 000F RET 1 R10
- 0x8C281189, // 0010 GETMET R10 R8 K137
+ 0x8C28117F, // 0010 GETMET R10 R8 K127
0x5C300200, // 0011 MOVE R12 R1
- 0x5834008A, // 0012 LDCONST R13 K138
+ 0x58340005, // 0012 LDCONST R13 K5
0x7C280600, // 0013 CALL R10 3
0x742A0000, // 0014 JMPT R10 #0016
- 0x00071401, // 0015 ADD R1 K138 R1
- 0x8C28113C, // 0016 GETMET R10 R8 K60
+ 0x00060A01, // 0015 ADD R1 K5 R1
+ 0x8C281112, // 0016 GETMET R10 R8 K18
0x5C300200, // 0017 MOVE R12 R1
- 0x5834008B, // 0018 LDCONST R13 K139
+ 0x58340013, // 0018 LDCONST R13 K19
0x7C280600, // 0019 CALL R10 3
- 0x782A0000, // 001A JMPF R10 #001C
- 0x0004038C, // 001B ADD R1 R1 K140
- 0x8C28111E, // 001C GETMET R10 R8 K30
- 0x5C300200, // 001D MOVE R12 R1
- 0x5834003F, // 001E LDCONST R13 K63
- 0x7C280600, // 001F CALL R10 3
- 0x242C1501, // 0020 GT R11 R10 K1
- 0x782E0003, // 0021 JMPF R11 #0026
- 0x04301505, // 0022 SUB R12 R10 K5
- 0x4032020C, // 0023 CONNECT R12 K1 R12
- 0x9430020C, // 0024 GETIDX R12 R1 R12
- 0x70020000, // 0025 JMP #0027
- 0x5C300200, // 0026 MOVE R12 R1
- 0x782E0003, // 0027 JMPF R11 #002C
- 0x00341505, // 0028 ADD R13 R10 K5
- 0x40341B87, // 0029 CONNECT R13 R13 K135
- 0x9434020D, // 002A GETIDX R13 R1 R13
- 0x70020000, // 002B JMP #002D
- 0x5C340200, // 002C MOVE R13 R1
- 0x8C38111E, // 002D GETMET R14 R8 K30
- 0x5C401A00, // 002E MOVE R16 R13
- 0x5844008D, // 002F LDCONST R17 K141
- 0x7C380600, // 0030 CALL R14 3
- 0x14381D01, // 0031 LT R14 R14 K1
- 0x783A0001, // 0032 JMPF R14 #0035
- 0x0004033D, // 0033 ADD R1 R1 K61
- 0x00341B3D, // 0034 ADD R13 R13 K61
- 0x8C38113C, // 0035 GETMET R14 R8 K60
- 0x5C401A00, // 0036 MOVE R16 R13
- 0x5844003D, // 0037 LDCONST R17 K61
- 0x7C380600, // 0038 CALL R14 3
- 0x8C3C113C, // 0039 GETMET R15 R8 K60
- 0x5C441A00, // 003A MOVE R17 R13
- 0x5848008E, // 003B LDCONST R18 K142
- 0x7C3C0600, // 003C CALL R15 3
- 0x783E0001, // 003D JMPF R15 #0040
- 0x5C400200, // 003E MOVE R16 R1
- 0x70020000, // 003F JMP #0041
- 0x00400344, // 0040 ADD R16 R1 K68
- 0x5C441C00, // 0041 MOVE R17 R14
- 0x74460007, // 0042 JMPT R17 #004B
- 0x5C441E00, // 0043 MOVE R17 R15
- 0x74460005, // 0044 JMPT R17 #004B
- 0x60440001, // 0045 GETGBL R17 G1
- 0x5848008F, // 0046 LDCONST R18 K143
- 0x7C440200, // 0047 CALL R17 1
- 0x50440000, // 0048 LDBOOL R17 0 0
- 0xA0000000, // 0049 CLOSE R0
- 0x80042200, // 004A RET 1 R17
- 0x50440000, // 004B LDBOOL R17 0 0
- 0x783E0008, // 004C JMPF R15 #0056
- 0x8C481390, // 004D GETMET R18 R9 K144
- 0x5C502000, // 004E MOVE R20 R16
- 0x7C480400, // 004F CALL R18 2
- 0x744A0002, // 0050 JMPT R18 #0054
- 0x50480000, // 0051 LDBOOL R18 0 0
- 0xA0000000, // 0052 CLOSE R0
- 0x80042400, // 0053 RET 1 R18
- 0x50440200, // 0054 LDBOOL R17 1 0
- 0x70020014, // 0055 JMP #006B
- 0x8C481390, // 0056 GETMET R18 R9 K144
- 0x5C500200, // 0057 MOVE R20 R1
- 0x7C480400, // 0058 CALL R18 2
- 0x784A0007, // 0059 JMPF R18 #0062
- 0x8C481390, // 005A GETMET R18 R9 K144
- 0x5C502000, // 005B MOVE R20 R16
- 0x7C480400, // 005C CALL R18 2
- 0x784A0002, // 005D JMPF R18 #0061
- 0x5C480A00, // 005E MOVE R18 R5
- 0x5C4C2000, // 005F MOVE R19 R16
- 0x7C480200, // 0060 CALL R18 1
- 0x70020008, // 0061 JMP #006B
- 0x8C481390, // 0062 GETMET R18 R9 K144
- 0x5C502000, // 0063 MOVE R20 R16
- 0x7C480400, // 0064 CALL R18 2
- 0x784A0001, // 0065 JMPF R18 #0068
- 0x50440200, // 0066 LDBOOL R17 1 0
- 0x70020002, // 0067 JMP #006B
- 0x50480000, // 0068 LDBOOL R18 0 0
- 0xA0000000, // 0069 CLOSE R0
- 0x80042400, // 006A RET 1 R18
- 0x782E0005, // 006B JMPF R11 #0072
- 0x0048193F, // 006C ADD R18 R12 K63
- 0x90026612, // 006D SETMBR R0 K51 R18
- 0x5C480400, // 006E MOVE R18 R2
- 0x884C0133, // 006F GETMBR R19 R0 K51
- 0x7C480200, // 0070 CALL R18 1
- 0x70020000, // 0071 JMP #0073
- 0x90026734, // 0072 SETMBR R0 K51 K52
- 0x4C480000, // 0073 LDNIL R18
- 0x78460025, // 0074 JMPF R17 #009B
- 0x5C4C0800, // 0075 MOVE R19 R4
- 0x5C502000, // 0076 MOVE R20 R16
- 0x7C4C0200, // 0077 CALL R19 1
- 0x50500200, // 0078 LDBOOL R20 1 0
- 0x4C540000, // 0079 LDNIL R21
- 0x1C542615, // 007A EQ R21 R19 R21
- 0x78560007, // 007B JMPF R21 #0084
- 0x60540001, // 007C GETGBL R21 G1
- 0x60580018, // 007D GETGBL R22 G24
- 0x585C0091, // 007E LDCONST R23 K145
- 0x5C602000, // 007F MOVE R24 R16
- 0x7C580400, // 0080 CALL R22 2
- 0x7C540200, // 0081 CALL R21 1
- 0x50500000, // 0082 LDBOOL R20 0 0
- 0x7002000A, // 0083 JMP #008F
- 0x54560003, // 0084 LDINT R21 4
- 0x20542615, // 0085 NE R21 R19 R21
- 0x78560007, // 0086 JMPF R21 #008F
- 0x60540001, // 0087 GETGBL R21 G1
- 0x60580018, // 0088 GETGBL R22 G24
- 0x585C0092, // 0089 LDCONST R23 K146
- 0x5C602000, // 008A MOVE R24 R16
- 0x5C642600, // 008B MOVE R25 R19
- 0x7C580600, // 008C CALL R22 3
- 0x7C540200, // 008D CALL R21 1
- 0x50500000, // 008E LDBOOL R20 0 0
- 0x78520003, // 008F JMPF R20 #0094
- 0x5C540C00, // 0090 MOVE R21 R6
- 0x5C582000, // 0091 MOVE R22 R16
+ 0x742A0004, // 001A JMPT R10 #0020
+ 0x8C281112, // 001B GETMET R10 R8 K18
+ 0x5C300200, // 001C MOVE R12 R1
+ 0x58340080, // 001D LDCONST R13 K128
+ 0x7C280600, // 001E CALL R10 3
+ 0x782A0000, // 001F JMPF R10 #0021
+ 0x00040381, // 0020 ADD R1 R1 K129
+ 0x8C28110C, // 0021 GETMET R10 R8 K12
+ 0x5C300200, // 0022 MOVE R12 R1
+ 0x58340006, // 0023 LDCONST R13 K6
+ 0x7C280600, // 0024 CALL R10 3
+ 0x242C1504, // 0025 GT R11 R10 K4
+ 0x782E0003, // 0026 JMPF R11 #002B
+ 0x0430152D, // 0027 SUB R12 R10 K45
+ 0x4032080C, // 0028 CONNECT R12 K4 R12
+ 0x9430020C, // 0029 GETIDX R12 R1 R12
+ 0x70020000, // 002A JMP #002C
+ 0x5C300200, // 002B MOVE R12 R1
+ 0x782E0003, // 002C JMPF R11 #0031
+ 0x0034152D, // 002D ADD R13 R10 K45
+ 0x40341B82, // 002E CONNECT R13 R13 K130
+ 0x9434020D, // 002F GETIDX R13 R1 R13
+ 0x70020000, // 0030 JMP #0032
+ 0x5C340200, // 0031 MOVE R13 R1
+ 0x8C38110C, // 0032 GETMET R14 R8 K12
+ 0x5C401A00, // 0033 MOVE R16 R13
+ 0x58440083, // 0034 LDCONST R17 K131
+ 0x7C380600, // 0035 CALL R14 3
+ 0x14381D04, // 0036 LT R14 R14 K4
+ 0x783A0001, // 0037 JMPF R14 #003A
+ 0x0004031E, // 0038 ADD R1 R1 K30
+ 0x00341B1E, // 0039 ADD R13 R13 K30
+ 0x8C381112, // 003A GETMET R14 R8 K18
+ 0x5C401A00, // 003B MOVE R16 R13
+ 0x5844001E, // 003C LDCONST R17 K30
+ 0x7C380600, // 003D CALL R14 3
+ 0x8C3C1112, // 003E GETMET R15 R8 K18
+ 0x5C441A00, // 003F MOVE R17 R13
+ 0x58480084, // 0040 LDCONST R18 K132
+ 0x7C3C0600, // 0041 CALL R15 3
+ 0x783E0001, // 0042 JMPF R15 #0045
+ 0x5C400200, // 0043 MOVE R16 R1
+ 0x70020000, // 0044 JMP #0046
+ 0x00400324, // 0045 ADD R16 R1 K36
+ 0x5C441C00, // 0046 MOVE R17 R14
+ 0x74460007, // 0047 JMPT R17 #0050
+ 0x5C441E00, // 0048 MOVE R17 R15
+ 0x74460005, // 0049 JMPT R17 #0050
+ 0x60440001, // 004A GETGBL R17 G1
+ 0x58480085, // 004B LDCONST R18 K133
+ 0x7C440200, // 004C CALL R17 1
+ 0x50440000, // 004D LDBOOL R17 0 0
+ 0xA0000000, // 004E CLOSE R0
+ 0x80042200, // 004F RET 1 R17
+ 0x50440000, // 0050 LDBOOL R17 0 0
+ 0x783E0008, // 0051 JMPF R15 #005B
+ 0x8C481386, // 0052 GETMET R18 R9 K134
+ 0x5C502000, // 0053 MOVE R20 R16
+ 0x7C480400, // 0054 CALL R18 2
+ 0x744A0002, // 0055 JMPT R18 #0059
+ 0x50480000, // 0056 LDBOOL R18 0 0
+ 0xA0000000, // 0057 CLOSE R0
+ 0x80042400, // 0058 RET 1 R18
+ 0x50440200, // 0059 LDBOOL R17 1 0
+ 0x70020014, // 005A JMP #0070
+ 0x8C481386, // 005B GETMET R18 R9 K134
+ 0x5C500200, // 005C MOVE R20 R1
+ 0x7C480400, // 005D CALL R18 2
+ 0x784A0007, // 005E JMPF R18 #0067
+ 0x8C481386, // 005F GETMET R18 R9 K134
+ 0x5C502000, // 0060 MOVE R20 R16
+ 0x7C480400, // 0061 CALL R18 2
+ 0x784A0002, // 0062 JMPF R18 #0066
+ 0x5C480A00, // 0063 MOVE R18 R5
+ 0x5C4C2000, // 0064 MOVE R19 R16
+ 0x7C480200, // 0065 CALL R18 1
+ 0x70020008, // 0066 JMP #0070
+ 0x8C481386, // 0067 GETMET R18 R9 K134
+ 0x5C502000, // 0068 MOVE R20 R16
+ 0x7C480400, // 0069 CALL R18 2
+ 0x784A0001, // 006A JMPF R18 #006D
+ 0x50440200, // 006B LDBOOL R17 1 0
+ 0x70020002, // 006C JMP #0070
+ 0x50480000, // 006D LDBOOL R18 0 0
+ 0xA0000000, // 006E CLOSE R0
+ 0x80042400, // 006F RET 1 R18
+ 0x782E0005, // 0070 JMPF R11 #0077
+ 0x00481906, // 0071 ADD R18 R12 K6
+ 0x90020612, // 0072 SETMBR R0 K3 R18
+ 0x5C480400, // 0073 MOVE R18 R2
+ 0x884C0103, // 0074 GETMBR R19 R0 K3
+ 0x7C480200, // 0075 CALL R18 1
+ 0x70020000, // 0076 JMP #0078
+ 0x90020707, // 0077 SETMBR R0 K3 K7
+ 0x4C480000, // 0078 LDNIL R18
+ 0x78460025, // 0079 JMPF R17 #00A0
+ 0x5C4C0800, // 007A MOVE R19 R4
+ 0x5C502000, // 007B MOVE R20 R16
+ 0x7C4C0200, // 007C CALL R19 1
+ 0x50500200, // 007D LDBOOL R20 1 0
+ 0x4C540000, // 007E LDNIL R21
+ 0x1C542615, // 007F EQ R21 R19 R21
+ 0x78560007, // 0080 JMPF R21 #0089
+ 0x60540001, // 0081 GETGBL R21 G1
+ 0x60580018, // 0082 GETGBL R22 G24
+ 0x585C0087, // 0083 LDCONST R23 K135
+ 0x5C602000, // 0084 MOVE R24 R16
+ 0x7C580400, // 0085 CALL R22 2
+ 0x7C540200, // 0086 CALL R21 1
+ 0x50500000, // 0087 LDBOOL R20 0 0
+ 0x7002000A, // 0088 JMP #0094
+ 0x54560003, // 0089 LDINT R21 4
+ 0x20542615, // 008A NE R21 R19 R21
+ 0x78560007, // 008B JMPF R21 #0094
+ 0x60540001, // 008C GETGBL R21 G1
+ 0x60580018, // 008D GETGBL R22 G24
+ 0x585C0088, // 008E LDCONST R23 K136
+ 0x5C602000, // 008F MOVE R24 R16
+ 0x5C642600, // 0090 MOVE R25 R19
+ 0x7C580600, // 0091 CALL R22 3
0x7C540200, // 0092 CALL R21 1
- 0x5C482A00, // 0093 MOVE R18 R21
- 0x4C540000, // 0094 LDNIL R21
- 0x1C542415, // 0095 EQ R21 R18 R21
- 0x78560003, // 0096 JMPF R21 #009B
- 0x5C540A00, // 0097 MOVE R21 R5
- 0x5C582000, // 0098 MOVE R22 R16
- 0x7C540200, // 0099 CALL R21 1
- 0x50440000, // 009A LDBOOL R17 0 0
- 0x5C4C2200, // 009B MOVE R19 R17
- 0x744E0003, // 009C JMPT R19 #00A1
- 0x5C4C0C00, // 009D MOVE R19 R6
- 0x5C500200, // 009E MOVE R20 R1
- 0x7C4C0200, // 009F CALL R19 1
- 0x5C482600, // 00A0 MOVE R18 R19
- 0x5C4C0E00, // 00A1 MOVE R19 R7
- 0x5C502400, // 00A2 MOVE R20 R18
- 0x7C4C0200, // 00A3 CALL R19 1
- 0x782E0003, // 00A4 JMPF R11 #00A9
- 0x5C500600, // 00A5 MOVE R20 R3
- 0x0054193F, // 00A6 ADD R21 R12 K63
- 0x7C500200, // 00A7 CALL R20 1
- 0x90026734, // 00A8 SETMBR R0 K51 K52
- 0xA0000000, // 00A9 CLOSE R0
- 0x80042600, // 00AA RET 1 R19
+ 0x50500000, // 0093 LDBOOL R20 0 0
+ 0x78520003, // 0094 JMPF R20 #0099
+ 0x5C540C00, // 0095 MOVE R21 R6
+ 0x5C582000, // 0096 MOVE R22 R16
+ 0x7C540200, // 0097 CALL R21 1
+ 0x5C482A00, // 0098 MOVE R18 R21
+ 0x4C540000, // 0099 LDNIL R21
+ 0x1C542415, // 009A EQ R21 R18 R21
+ 0x78560003, // 009B JMPF R21 #00A0
+ 0x5C540A00, // 009C MOVE R21 R5
+ 0x5C582000, // 009D MOVE R22 R16
+ 0x7C540200, // 009E CALL R21 1
+ 0x50440000, // 009F LDBOOL R17 0 0
+ 0x5C4C2200, // 00A0 MOVE R19 R17
+ 0x744E0003, // 00A1 JMPT R19 #00A6
+ 0x5C4C0C00, // 00A2 MOVE R19 R6
+ 0x5C500200, // 00A3 MOVE R20 R1
+ 0x7C4C0200, // 00A4 CALL R19 1
+ 0x5C482600, // 00A5 MOVE R18 R19
+ 0x5C4C0E00, // 00A6 MOVE R19 R7
+ 0x5C502400, // 00A7 MOVE R20 R18
+ 0x7C4C0200, // 00A8 CALL R19 1
+ 0x782E0003, // 00A9 JMPF R11 #00AE
+ 0x5C500600, // 00AA MOVE R20 R3
+ 0x00541906, // 00AB ADD R21 R12 K6
+ 0x7C500200, // 00AC CALL R20 1
+ 0x90020707, // 00AD SETMBR R0 K3 K7
+ 0xA0000000, // 00AE CLOSE R0
+ 0x80042600, // 00AF RET 1 R19
})
)
);
@@ -2527,12 +2437,12 @@ be_local_closure(class_Tasmota_load, /* name */
/********************************************************************
-** Solidified function: urlfetch
+** Solidified function: add_rule
********************************************************************/
-be_local_closure(class_Tasmota_urlfetch, /* name */
+be_local_closure(class_Tasmota_add_rule, /* name */
be_nested_proto(
- 10, /* nstack */
- 3, /* argc */
+ 12, /* nstack */
+ 5, /* argc */
10, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -2540,57 +2450,46 @@ be_local_closure(class_Tasmota_urlfetch, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_urlfetch,
+ &be_const_str_add_rule,
&be_const_str_solidified,
- ( &(const binstruction[48]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x1C0C0403, // 0001 EQ R3 R2 R3
- 0x780E000D, // 0002 JMPF R3 #0011
- 0xA40E7600, // 0003 IMPORT R3 K59
- 0x8C100793, // 0004 GETMET R4 R3 K147
- 0x5C180200, // 0005 MOVE R6 R1
- 0x581C008A, // 0006 LDCONST R7 K138
- 0x7C100600, // 0007 CALL R4 3
- 0x8C10093A, // 0008 GETMET R4 R4 K58
- 0x7C100200, // 0009 CALL R4 1
- 0x5C080800, // 000A MOVE R2 R4
- 0x6010000C, // 000B GETGBL R4 G12
- 0x5C140400, // 000C MOVE R5 R2
- 0x7C100200, // 000D CALL R4 1
- 0x1C100901, // 000E EQ R4 R4 K1
- 0x78120000, // 000F JMPF R4 #0011
- 0x58080094, // 0010 LDCONST R2 K148
- 0xB80F2A00, // 0011 GETNGBL R3 K149
- 0x7C0C0000, // 0012 CALL R3 0
- 0x8C100796, // 0013 GETMET R4 R3 K150
- 0x50180200, // 0014 LDBOOL R6 1 0
- 0x7C100400, // 0015 CALL R4 2
- 0x8C100797, // 0016 GETMET R4 R3 K151
- 0x5C180200, // 0017 MOVE R6 R1
- 0x7C100400, // 0018 CALL R4 2
- 0x8C100798, // 0019 GETMET R4 R3 K152
- 0x7C100200, // 001A CALL R4 1
- 0x541600C7, // 001B LDINT R5 200
- 0x20140805, // 001C NE R5 R4 R5
- 0x78160004, // 001D JMPF R5 #0023
- 0x60140008, // 001E GETGBL R5 G8
- 0x5C180800, // 001F MOVE R6 R4
- 0x7C140200, // 0020 CALL R5 1
- 0x00173205, // 0021 ADD R5 K153 R5
- 0xB0073405, // 0022 RAISE 1 K154 R5
- 0x8C14079B, // 0023 GETMET R5 R3 K155
- 0x5C1C0400, // 0024 MOVE R7 R2
- 0x7C140400, // 0025 CALL R5 2
- 0x8C18079C, // 0026 GETMET R6 R3 K156
- 0x7C180200, // 0027 CALL R6 1
- 0x8C180122, // 0028 GETMET R6 R0 K34
- 0x60200008, // 0029 GETGBL R8 G8
- 0x5C240A00, // 002A MOVE R9 R5
- 0x7C200200, // 002B CALL R8 1
- 0x00233A08, // 002C ADD R8 K157 R8
- 0x58240019, // 002D LDCONST R9 K25
- 0x7C180600, // 002E CALL R6 3
- 0x80040800, // 002F RET 1 R4
+ ( &(const binstruction[37]) { /* code */
+ 0x8C14011A, // 0000 GETMET R5 R0 K26
+ 0x5C1C0400, // 0001 MOVE R7 R2
+ 0x7C140400, // 0002 CALL R5 2
+ 0x88140147, // 0003 GETMBR R5 R0 K71
+ 0x4C180000, // 0004 LDNIL R6
+ 0x1C140A06, // 0005 EQ R5 R5 R6
+ 0x78160002, // 0006 JMPF R5 #000A
+ 0x60140012, // 0007 GETGBL R5 G18
+ 0x7C140000, // 0008 CALL R5 0
+ 0x90028E05, // 0009 SETMBR R0 K71 R5
+ 0x60140004, // 000A GETGBL R5 G4
+ 0x5C180400, // 000B MOVE R6 R2
+ 0x7C140200, // 000C CALL R5 1
+ 0x1C140B28, // 000D EQ R5 R5 K40
+ 0x78160013, // 000E JMPF R5 #0023
+ 0x4C140000, // 000F LDNIL R5
+ 0x20140605, // 0010 NE R5 R3 R5
+ 0x78160003, // 0011 JMPF R5 #0016
+ 0x8C140189, // 0012 GETMET R5 R0 K137
+ 0x5C1C0200, // 0013 MOVE R7 R1
+ 0x5C200600, // 0014 MOVE R8 R3
+ 0x7C140600, // 0015 CALL R5 3
+ 0x88140147, // 0016 GETMBR R5 R0 K71
+ 0x8C140B1D, // 0017 GETMET R5 R5 K29
+ 0xB81E9C00, // 0018 GETNGBL R7 K78
+ 0x8820018A, // 0019 GETMBR R8 R0 K138
+ 0x8C20118B, // 001A GETMET R8 R8 K139
+ 0x5C280200, // 001B MOVE R10 R1
+ 0x7C200400, // 001C CALL R8 2
+ 0x5C240400, // 001D MOVE R9 R2
+ 0x5C280600, // 001E MOVE R10 R3
+ 0x5C2C0800, // 001F MOVE R11 R4
+ 0x7C1C0800, // 0020 CALL R7 4
+ 0x7C140400, // 0021 CALL R5 2
+ 0x70020000, // 0022 JMP #0024
+ 0xB006534D, // 0023 RAISE 1 K41 K77
+ 0x80000000, // 0024 RET 0
})
)
);
@@ -2598,9 +2497,9 @@ be_local_closure(class_Tasmota_urlfetch, /* name */
/********************************************************************
-** Solidified function: gen_cb
+** Solidified function: check_not_method
********************************************************************/
-be_local_closure(class_Tasmota_gen_cb, /* name */
+be_local_closure(class_Tasmota_check_not_method, /* name */
be_nested_proto(
6, /* nstack */
2, /* argc */
@@ -2611,14 +2510,24 @@ be_local_closure(class_Tasmota_gen_cb, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_gen_cb,
+ &be_const_str_check_not_method,
&be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0xA40B3C00, // 0000 IMPORT R2 K158
- 0x8C0C059F, // 0001 GETMET R3 R2 K159
- 0x5C140200, // 0002 MOVE R5 R1
- 0x7C0C0400, // 0003 CALL R3 2
- 0x80040600, // 0004 RET 1 R3
+ ( &(const binstruction[15]) { /* code */
+ 0xA40AE000, // 0000 IMPORT R2 K112
+ 0x600C0004, // 0001 GETGBL R3 G4
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x200C0728, // 0004 NE R3 R3 K40
+ 0x780E0000, // 0005 JMPF R3 #0007
+ 0xB007198D, // 0006 RAISE 1 K140 K141
+ 0x8C0C058E, // 0007 GETMET R3 R2 K142
+ 0x5C140200, // 0008 MOVE R5 R1
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x50100200, // 000A LDBOOL R4 1 0
+ 0x1C0C0604, // 000B EQ R3 R3 R4
+ 0x780E0000, // 000C JMPF R3 #000E
+ 0xB007198F, // 000D RAISE 1 K140 K143
+ 0x80000000, // 000E RET 0
})
)
);
@@ -2626,11 +2535,168 @@ be_local_closure(class_Tasmota_gen_cb, /* name */
/********************************************************************
-** Solidified function: run_network_up
+** Solidified function: add_rule_once
********************************************************************/
-be_local_closure(class_Tasmota_run_network_up, /* name */
+be_local_closure(class_Tasmota_add_rule_once, /* name */
be_nested_proto(
- 9, /* nstack */
+ 10, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_add_rule_once,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x8C100190, // 0000 GETMET R4 R0 K144
+ 0x5C180200, // 0001 MOVE R6 R1
+ 0x5C1C0400, // 0002 MOVE R7 R2
+ 0x5C200600, // 0003 MOVE R8 R3
+ 0x50240200, // 0004 LDBOOL R9 1 0
+ 0x7C100A00, // 0005 CALL R4 5
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: exec_rules
+********************************************************************/
+be_local_closure(class_Tasmota_exec_rules, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_exec_rules,
+ &be_const_str_solidified,
+ ( &(const binstruction[60]) { /* code */
+ 0x880C0140, // 0000 GETMBR R3 R0 K64
+ 0x88100147, // 0001 GETMBR R4 R0 K71
+ 0x74120002, // 0002 JMPT R4 #0006
+ 0x4C100000, // 0003 LDNIL R4
+ 0x20100604, // 0004 NE R4 R3 R4
+ 0x78120033, // 0005 JMPF R4 #003A
+ 0xA4120000, // 0006 IMPORT R4 K0
+ 0x4C140000, // 0007 LDNIL R5
+ 0x90028005, // 0008 SETMBR R0 K64 R5
+ 0x50140000, // 0009 LDBOOL R5 0 0
+ 0x8C18090B, // 000A GETMET R6 R4 K11
+ 0x5C200200, // 000B MOVE R8 R1
+ 0x7C180400, // 000C CALL R6 2
+ 0x4C1C0000, // 000D LDNIL R7
+ 0x1C1C0C07, // 000E EQ R7 R6 R7
+ 0x781E0004, // 000F JMPF R7 #0015
+ 0x8C1C0114, // 0010 GETMET R7 R0 K20
+ 0x00269E01, // 0011 ADD R9 K79 R1
+ 0x58280050, // 0012 LDCONST R10 K80
+ 0x7C1C0600, // 0013 CALL R7 3
+ 0x5C180200, // 0014 MOVE R6 R1
+ 0x780A001E, // 0015 JMPF R2 #0035
+ 0x881C0147, // 0016 GETMBR R7 R0 K71
+ 0x781E001C, // 0017 JMPF R7 #0035
+ 0x581C0004, // 0018 LDCONST R7 K4
+ 0x6020000C, // 0019 GETGBL R8 G12
+ 0x88240147, // 001A GETMBR R9 R0 K71
+ 0x7C200200, // 001B CALL R8 1
+ 0x14200E08, // 001C LT R8 R7 R8
+ 0x78220016, // 001D JMPF R8 #0035
+ 0x88200147, // 001E GETMBR R8 R0 K71
+ 0x94201007, // 001F GETIDX R8 R8 R7
+ 0x8C240152, // 0020 GETMET R9 R0 K82
+ 0x5C2C0C00, // 0021 MOVE R11 R6
+ 0x8830113C, // 0022 GETMBR R12 R8 K60
+ 0x8834113F, // 0023 GETMBR R13 R8 K63
+ 0x7C240800, // 0024 CALL R9 4
+ 0x74160001, // 0025 JMPT R5 #0028
+ 0x74260000, // 0026 JMPT R9 #0028
+ 0x50140001, // 0027 LDBOOL R5 0 1
+ 0x50140200, // 0028 LDBOOL R5 1 0
+ 0x78260008, // 0029 JMPF R9 #0033
+ 0x88281191, // 002A GETMBR R10 R8 K145
+ 0x502C0200, // 002B LDBOOL R11 1 0
+ 0x1C28140B, // 002C EQ R10 R10 R11
+ 0x782A0004, // 002D JMPF R10 #0033
+ 0x88280147, // 002E GETMBR R10 R0 K71
+ 0x8C281531, // 002F GETMET R10 R10 K49
+ 0x5C300E00, // 0030 MOVE R12 R7
+ 0x7C280400, // 0031 CALL R10 2
+ 0x70020000, // 0032 JMP #0034
+ 0x001C0F2D, // 0033 ADD R7 R7 K45
+ 0x7001FFE3, // 0034 JMP #0019
+ 0x4C1C0000, // 0035 LDNIL R7
+ 0x201C0607, // 0036 NE R7 R3 R7
+ 0x781E0000, // 0037 JMPF R7 #0039
+ 0x90028006, // 0038 SETMBR R0 K64 R6
+ 0x80040A00, // 0039 RET 1 R5
+ 0x50100000, // 003A LDBOOL R4 0 0
+ 0x80040800, // 003B RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_timer
+********************************************************************/
+be_local_closure(class_Tasmota_set_timer, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_set_timer,
+ &be_const_str_solidified,
+ ( &(const binstruction[21]) { /* code */
+ 0x8C10011A, // 0000 GETMET R4 R0 K26
+ 0x5C180400, // 0001 MOVE R6 R2
+ 0x7C100400, // 0002 CALL R4 2
+ 0x8810012E, // 0003 GETMBR R4 R0 K46
+ 0x4C140000, // 0004 LDNIL R5
+ 0x1C100805, // 0005 EQ R4 R4 R5
+ 0x78120002, // 0006 JMPF R4 #000A
+ 0x60100012, // 0007 GETGBL R4 G18
+ 0x7C100000, // 0008 CALL R4 0
+ 0x90025C04, // 0009 SETMBR R0 K46 R4
+ 0x8810012E, // 000A GETMBR R4 R0 K46
+ 0x8C10091D, // 000B GETMET R4 R4 K29
+ 0xB81A9C00, // 000C GETNGBL R6 K78
+ 0x8C1C0192, // 000D GETMET R7 R0 K146
+ 0x5C240200, // 000E MOVE R9 R1
+ 0x7C1C0400, // 000F CALL R7 2
+ 0x5C200400, // 0010 MOVE R8 R2
+ 0x5C240600, // 0011 MOVE R9 R3
+ 0x7C180600, // 0012 CALL R6 3
+ 0x7C100400, // 0013 CALL R4 2
+ 0x80000000, // 0014 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: gc
+********************************************************************/
+be_local_closure(class_Tasmota_gc, /* name */
+ be_nested_proto(
+ 4, /* nstack */
1, /* argc */
10, /* varg */
0, /* has upvals */
@@ -2639,48 +2705,69 @@ be_local_closure(class_Tasmota_run_network_up, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_run_network_up,
+ &be_const_str_gc,
&be_const_str_solidified,
- ( &(const binstruction[39]) { /* code */
- 0x88040156, // 0000 GETMBR R1 R0 K86
- 0x4C080000, // 0001 LDNIL R2
- 0x1C040202, // 0002 EQ R1 R1 R2
- 0x78060000, // 0003 JMPF R1 #0005
- 0x80000200, // 0004 RET 0
- 0x8C040155, // 0005 GETMET R1 R0 K85
- 0x7C040200, // 0006 CALL R1 1
- 0x7806001D, // 0007 JMPF R1 #0026
- 0x6004000C, // 0008 GETGBL R1 G12
- 0x88080156, // 0009 GETMBR R2 R0 K86
- 0x7C040200, // 000A CALL R1 1
- 0x24040301, // 000B GT R1 R1 K1
- 0x78060016, // 000C JMPF R1 #0024
- 0x88040156, // 000D GETMBR R1 R0 K86
- 0x94040301, // 000E GETIDX R1 R1 K1
- 0x88080156, // 000F GETMBR R2 R0 K86
- 0x8C080516, // 0010 GETMET R2 R2 K22
- 0x58100001, // 0011 LDCONST R4 K1
- 0x7C080400, // 0012 CALL R2 2
- 0xA8020003, // 0013 EXBLK 0 #0018
- 0x5C080200, // 0014 MOVE R2 R1
- 0x7C080000, // 0015 CALL R2 0
- 0xA8040001, // 0016 EXBLK 1 1
- 0x7002000A, // 0017 JMP #0023
- 0xAC080002, // 0018 CATCH R2 0 2
- 0x70020007, // 0019 JMP #0022
- 0x60100001, // 001A GETGBL R4 G1
- 0x60140018, // 001B GETGBL R5 G24
- 0x581800A0, // 001C LDCONST R6 K160
- 0x5C1C0400, // 001D MOVE R7 R2
- 0x5C200600, // 001E MOVE R8 R3
- 0x7C140600, // 001F CALL R5 3
- 0x7C100200, // 0020 CALL R4 1
- 0x70020000, // 0021 JMP #0023
- 0xB0080000, // 0022 RAISE 2 R0 R0
- 0x7001FFE3, // 0023 JMP #0008
- 0x4C040000, // 0024 LDNIL R1
- 0x9002AC01, // 0025 SETMBR R0 K86 R1
- 0x80000000, // 0026 RET 0
+ ( &(const binstruction[ 6]) { /* code */
+ 0xA406F800, // 0000 IMPORT R1 K124
+ 0x8C080393, // 0001 GETMET R2 R1 K147
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080394, // 0003 GETMET R2 R1 K148
+ 0x7C080200, // 0004 CALL R2 1
+ 0x80040400, // 0005 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_op
+********************************************************************/
+be_local_closure(class_Tasmota_find_op, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_find_op,
+ &be_const_str_solidified,
+ ( &(const binstruction[31]) { /* code */
+ 0x8C080195, // 0000 GETMET R2 R0 K149
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x280C0504, // 0003 GE R3 R2 K4
+ 0x780E0011, // 0004 JMPF R3 #0017
+ 0x540E7FFE, // 0005 LDINT R3 32767
+ 0x2C0C0403, // 0006 AND R3 R2 R3
+ 0x5412000F, // 0007 LDINT R4 16
+ 0x3C100404, // 0008 SHR R4 R2 R4
+ 0x60140012, // 0009 GETGBL R5 G18
+ 0x7C140000, // 000A CALL R5 0
+ 0x0418072D, // 000B SUB R6 R3 K45
+ 0x401A0806, // 000C CONNECT R6 K4 R6
+ 0x94180206, // 000D GETIDX R6 R1 R6
+ 0x40180A06, // 000E CONNECT R6 R5 R6
+ 0x0418092D, // 000F SUB R6 R4 K45
+ 0x40180606, // 0010 CONNECT R6 R3 R6
+ 0x94180206, // 0011 GETIDX R6 R1 R6
+ 0x40180A06, // 0012 CONNECT R6 R5 R6
+ 0x40180982, // 0013 CONNECT R6 R4 K130
+ 0x94180206, // 0014 GETIDX R6 R1 R6
+ 0x40180A06, // 0015 CONNECT R6 R5 R6
+ 0x80040A00, // 0016 RET 1 R5
+ 0x600C0012, // 0017 GETGBL R3 G18
+ 0x7C0C0000, // 0018 CALL R3 0
+ 0x40100601, // 0019 CONNECT R4 R3 R1
+ 0x4C100000, // 001A LDNIL R4
+ 0x40100604, // 001B CONNECT R4 R3 R4
+ 0x4C100000, // 001C LDNIL R4
+ 0x40100604, // 001D CONNECT R4 R3 R4
+ 0x80040600, // 001E RET 1 R3
})
)
);
@@ -2704,24 +2791,24 @@ be_local_closure(class_Tasmota_urlfetch_cmd, /* name */
&be_const_str_urlfetch_cmd,
&be_const_str_solidified,
( &(const binstruction[34]) { /* code */
- 0xA4167600, // 0000 IMPORT R5 K59
- 0x8C180B1E, // 0001 GETMET R6 R5 K30
+ 0xA4160200, // 0000 IMPORT R5 K1
+ 0x8C180B0C, // 0001 GETMET R6 R5 K12
0x5C200600, // 0002 MOVE R8 R3
- 0x582400A1, // 0003 LDCONST R9 K161
+ 0x58240096, // 0003 LDCONST R9 K150
0x7C180600, // 0004 CALL R6 3
- 0x20180D01, // 0005 NE R6 R6 K1
+ 0x20180D04, // 0005 NE R6 R6 K4
0x781A0003, // 0006 JMPF R6 #000B
- 0x8C1801A2, // 0007 GETMET R6 R0 K162
- 0x582000A3, // 0008 LDCONST R8 K163
+ 0x8C180197, // 0007 GETMET R6 R0 K151
+ 0x58200098, // 0008 LDCONST R8 K152
0x7C180400, // 0009 CALL R6 2
0x80000C00, // 000A RET 0
0xA802000A, // 000B EXBLK 0 #0017
- 0x8C1801A4, // 000C GETMET R6 R0 K164
+ 0x8C180199, // 000C GETMET R6 R0 K153
0x5C200600, // 000D MOVE R8 R3
0x7C180400, // 000E CALL R6 2
- 0x141C0D01, // 000F LT R7 R6 K1
+ 0x141C0D04, // 000F LT R7 R6 K4
0x781E0003, // 0010 JMPF R7 #0015
- 0x8C1C01A5, // 0011 GETMET R7 R0 K165
+ 0x8C1C019A, // 0011 GETMET R7 R0 K154
0x7C1C0200, // 0012 CALL R7 1
0xA8040001, // 0013 EXBLK 1 1
0x80000E00, // 0014 RET 0
@@ -2729,13 +2816,13 @@ be_local_closure(class_Tasmota_urlfetch_cmd, /* name */
0x70020006, // 0016 JMP #001E
0xAC180002, // 0017 CATCH R6 0 2
0x70020003, // 0018 JMP #001D
- 0x8C2001A5, // 0019 GETMET R8 R0 K165
+ 0x8C20019A, // 0019 GETMET R8 R0 K154
0x7C200200, // 001A CALL R8 1
0x80001000, // 001B RET 0
0x70020000, // 001C JMP #001E
0xB0080000, // 001D RAISE 2 R0 R0
- 0xB81A1400, // 001E GETNGBL R6 K10
- 0x8C180DA6, // 001F GETMET R6 R6 K166
+ 0xB81A0400, // 001E GETNGBL R6 K2
+ 0x8C180D9B, // 001F GETMET R6 R6 K155
0x7C180200, // 0020 CALL R6 1
0x80000000, // 0021 RET 0
})
@@ -2745,11 +2832,11 @@ be_local_closure(class_Tasmota_urlfetch_cmd, /* name */
/********************************************************************
-** Solidified function: find_list_i
+** Solidified function: hs2rgb
********************************************************************/
-be_local_closure(class_Tasmota_find_list_i, /* name */
+be_local_closure(class_Tasmota_hs2rgb, /* name */
be_nested_proto(
- 9, /* nstack */
+ 17, /* nstack */
3, /* argc */
10, /* varg */
0, /* has upvals */
@@ -2758,29 +2845,77 @@ be_local_closure(class_Tasmota_find_list_i, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_find_list_i,
+ &be_const_str_hs2rgb,
&be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
- 0xA40E7600, // 0000 IMPORT R3 K59
- 0x58100001, // 0001 LDCONST R4 K1
- 0x8C14074D, // 0002 GETMET R5 R3 K77
- 0x5C1C0400, // 0003 MOVE R7 R2
- 0x7C140400, // 0004 CALL R5 2
- 0x6018000C, // 0005 GETGBL R6 G12
- 0x5C1C0200, // 0006 MOVE R7 R1
- 0x7C180200, // 0007 CALL R6 1
- 0x14180806, // 0008 LT R6 R4 R6
- 0x781A0007, // 0009 JMPF R6 #0012
- 0x8C18074D, // 000A GETMET R6 R3 K77
- 0x94200204, // 000B GETIDX R8 R1 R4
- 0x7C180400, // 000C CALL R6 2
- 0x1C180C05, // 000D EQ R6 R6 R5
- 0x781A0000, // 000E JMPF R6 #0010
- 0x80040800, // 000F RET 1 R4
- 0x00100905, // 0010 ADD R4 R4 K5
- 0x7001FFF2, // 0011 JMP #0005
- 0x4C180000, // 0012 LDNIL R6
- 0x80040C00, // 0013 RET 1 R6
+ ( &(const binstruction[68]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x1C0C0403, // 0001 EQ R3 R2 R3
+ 0x780E0000, // 0002 JMPF R3 #0004
+ 0x540A00FE, // 0003 LDINT R2 255
+ 0x540E00FE, // 0004 LDINT R3 255
+ 0x541200FE, // 0005 LDINT R4 255
+ 0x541600FE, // 0006 LDINT R5 255
+ 0x541A0167, // 0007 LDINT R6 360
+ 0x10040206, // 0008 MOD R1 R1 R6
+ 0x24180504, // 0009 GT R6 R2 K4
+ 0x781A0031, // 000A JMPF R6 #003D
+ 0x541A003B, // 000B LDINT R6 60
+ 0x0C180206, // 000C DIV R6 R1 R6
+ 0x541E003B, // 000D LDINT R7 60
+ 0x101C0207, // 000E MOD R7 R1 R7
+ 0x542200FE, // 000F LDINT R8 255
+ 0x04201002, // 0010 SUB R8 R8 R2
+ 0xB8260400, // 0011 GETNGBL R9 K2
+ 0x8C24139C, // 0012 GETMET R9 R9 K156
+ 0x5C2C0E00, // 0013 MOVE R11 R7
+ 0x58300004, // 0014 LDCONST R12 K4
+ 0x5436003B, // 0015 LDINT R13 60
+ 0x543A00FE, // 0016 LDINT R14 255
+ 0x5C3C1000, // 0017 MOVE R15 R8
+ 0x7C240C00, // 0018 CALL R9 6
+ 0xB82A0400, // 0019 GETNGBL R10 K2
+ 0x8C28159C, // 001A GETMET R10 R10 K156
+ 0x5C300E00, // 001B MOVE R12 R7
+ 0x58340004, // 001C LDCONST R13 K4
+ 0x543A003B, // 001D LDINT R14 60
+ 0x5C3C1000, // 001E MOVE R15 R8
+ 0x544200FE, // 001F LDINT R16 255
+ 0x7C280C00, // 0020 CALL R10 6
+ 0x1C2C0D04, // 0021 EQ R11 R6 K4
+ 0x782E0002, // 0022 JMPF R11 #0026
+ 0x5C141400, // 0023 MOVE R5 R10
+ 0x5C101000, // 0024 MOVE R4 R8
+ 0x70020016, // 0025 JMP #003D
+ 0x1C2C0D2D, // 0026 EQ R11 R6 K45
+ 0x782E0002, // 0027 JMPF R11 #002B
+ 0x5C0C1200, // 0028 MOVE R3 R9
+ 0x5C101000, // 0029 MOVE R4 R8
+ 0x70020011, // 002A JMP #003D
+ 0x1C2C0D42, // 002B EQ R11 R6 K66
+ 0x782E0002, // 002C JMPF R11 #0030
+ 0x5C0C1000, // 002D MOVE R3 R8
+ 0x5C101400, // 002E MOVE R4 R10
+ 0x7002000C, // 002F JMP #003D
+ 0x1C2C0D50, // 0030 EQ R11 R6 K80
+ 0x782E0002, // 0031 JMPF R11 #0035
+ 0x5C0C1000, // 0032 MOVE R3 R8
+ 0x5C141200, // 0033 MOVE R5 R9
+ 0x70020007, // 0034 JMP #003D
+ 0x542E0003, // 0035 LDINT R11 4
+ 0x1C2C0C0B, // 0036 EQ R11 R6 R11
+ 0x782E0002, // 0037 JMPF R11 #003B
+ 0x5C0C1400, // 0038 MOVE R3 R10
+ 0x5C141000, // 0039 MOVE R5 R8
+ 0x70020001, // 003A JMP #003D
+ 0x5C141000, // 003B MOVE R5 R8
+ 0x5C101200, // 003C MOVE R4 R9
+ 0x541A000F, // 003D LDINT R6 16
+ 0x38180606, // 003E SHL R6 R3 R6
+ 0x541E0007, // 003F LDINT R7 8
+ 0x381C0A07, // 0040 SHL R7 R5 R7
+ 0x30180C07, // 0041 OR R6 R6 R7
+ 0x30180C04, // 0042 OR R6 R6 R4
+ 0x80040C00, // 0043 RET 1 R6
})
)
);
@@ -2788,11 +2923,11 @@ be_local_closure(class_Tasmota_find_list_i, /* name */
/********************************************************************
-** Solidified function: remove_timer
+** Solidified function: time_str
********************************************************************/
-be_local_closure(class_Tasmota_remove_timer, /* name */
+be_local_closure(class_Tasmota_time_str, /* name */
be_nested_proto(
- 7, /* nstack */
+ 11, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -2801,27 +2936,22 @@ be_local_closure(class_Tasmota_remove_timer, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_remove_timer,
+ &be_const_str_time_str,
&be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x88080128, // 0000 GETMBR R2 R0 K40
- 0x780A000E, // 0001 JMPF R2 #0011
- 0x580C0001, // 0002 LDCONST R3 K1
- 0x8C100502, // 0003 GETMET R4 R2 K2
- 0x7C100200, // 0004 CALL R4 1
- 0x14100604, // 0005 LT R4 R3 R4
- 0x78120009, // 0006 JMPF R4 #0011
- 0x94100403, // 0007 GETIDX R4 R2 R3
- 0x88100903, // 0008 GETMBR R4 R4 K3
- 0x1C100801, // 0009 EQ R4 R4 R1
- 0x78120003, // 000A JMPF R4 #000F
- 0x8C100516, // 000B GETMET R4 R2 K22
- 0x5C180600, // 000C MOVE R6 R3
- 0x7C100400, // 000D CALL R4 2
- 0x70020000, // 000E JMP #0010
- 0x000C0705, // 000F ADD R3 R3 K5
- 0x7001FFF1, // 0010 JMP #0003
- 0x80000000, // 0011 RET 0
+ ( &(const binstruction[13]) { /* code */
+ 0x8C08019D, // 0000 GETMET R2 R0 K157
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x600C0018, // 0003 GETGBL R3 G24
+ 0x5810009E, // 0004 LDCONST R4 K158
+ 0x9414059F, // 0005 GETIDX R5 R2 K159
+ 0x941805A0, // 0006 GETIDX R6 R2 K160
+ 0x941C05A1, // 0007 GETIDX R7 R2 K161
+ 0x942005A2, // 0008 GETIDX R8 R2 K162
+ 0x942405A3, // 0009 GETIDX R9 R2 K163
+ 0x942805A4, // 000A GETIDX R10 R2 K164
+ 0x7C0C0E00, // 000B CALL R3 7
+ 0x80040600, // 000C RET 1 R3
})
)
);
@@ -2829,60 +2959,11 @@ be_local_closure(class_Tasmota_remove_timer, /* name */
/********************************************************************
-** Solidified function: run_deferred
+** Solidified function: try_rule
********************************************************************/
-be_local_closure(class_Tasmota_run_deferred, /* name */
+be_local_closure(class_Tasmota_try_rule, /* name */
be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_run_deferred,
- &be_const_str_solidified,
- ( &(const binstruction[26]) { /* code */
- 0x88040110, // 0000 GETMBR R1 R0 K16
- 0x78060016, // 0001 JMPF R1 #0019
- 0x6004000C, // 0002 GETGBL R1 G12
- 0x88080110, // 0003 GETMBR R2 R0 K16
- 0x7C040200, // 0004 CALL R1 1
- 0x24080301, // 0005 GT R2 R1 K1
- 0x780A0009, // 0006 JMPF R2 #0011
- 0x88080110, // 0007 GETMBR R2 R0 K16
- 0x94080501, // 0008 GETIDX R2 R2 K1
- 0x880C0110, // 0009 GETMBR R3 R0 K16
- 0x8C0C0716, // 000A GETMET R3 R3 K22
- 0x58140001, // 000B LDCONST R5 K1
- 0x7C0C0400, // 000C CALL R3 2
- 0x04040305, // 000D SUB R1 R1 K5
- 0x5C0C0400, // 000E MOVE R3 R2
- 0x7C0C0000, // 000F CALL R3 0
- 0x7001FFF3, // 0010 JMP #0005
- 0x6008000C, // 0011 GETGBL R2 G12
- 0x880C0110, // 0012 GETMBR R3 R0 K16
- 0x7C080200, // 0013 CALL R2 1
- 0x1C080501, // 0014 EQ R2 R2 K1
- 0x780A0002, // 0015 JMPF R2 #0019
- 0xB80A1400, // 0016 GETNGBL R2 K10
- 0x88080512, // 0017 GETMBR R2 R2 K18
- 0x900A2701, // 0018 SETMBR R2 K19 K1
- 0x80000000, // 0019 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_cron
-********************************************************************/
-be_local_closure(class_Tasmota_add_cron, /* name */
- be_nested_proto(
- 13, /* nstack */
+ 9, /* nstack */
4, /* argc */
10, /* varg */
0, /* has upvals */
@@ -2891,36 +2972,240 @@ be_local_closure(class_Tasmota_add_cron, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_cron,
+ &be_const_str_try_rule,
&be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x8C100127, // 0000 GETMET R4 R0 K39
- 0x5C180400, // 0001 MOVE R6 R2
+ ( &(const binstruction[18]) { /* code */
+ 0x8C1005A5, // 0000 GETMET R4 R2 K165
+ 0x5C180200, // 0001 MOVE R6 R1
0x7C100400, // 0002 CALL R4 2
- 0x88100100, // 0003 GETMBR R4 R0 K0
- 0x4C140000, // 0004 LDNIL R5
- 0x1C100805, // 0005 EQ R4 R4 R5
- 0x78120002, // 0006 JMPF R4 #000A
- 0x60100012, // 0007 GETGBL R4 G18
- 0x7C100000, // 0008 CALL R4 0
- 0x90020004, // 0009 SETMBR R0 K0 R4
- 0xB812B800, // 000A GETNGBL R4 K92
- 0x60140008, // 000B GETGBL R5 G8
- 0x5C180200, // 000C MOVE R6 R1
- 0x7C140200, // 000D CALL R5 1
- 0x7C100200, // 000E CALL R4 1
- 0x8C14095E, // 000F GETMET R5 R4 K94
- 0x7C140200, // 0010 CALL R5 1
- 0x88180100, // 0011 GETMBR R6 R0 K0
- 0x8C180D11, // 0012 GETMET R6 R6 K17
- 0xB8225200, // 0013 GETNGBL R8 K41
- 0x5C240A00, // 0014 MOVE R9 R5
- 0x5C280400, // 0015 MOVE R10 R2
- 0x5C2C0600, // 0016 MOVE R11 R3
- 0x5C300800, // 0017 MOVE R12 R4
- 0x7C200800, // 0018 CALL R8 4
- 0x7C180400, // 0019 CALL R6 2
- 0x80000000, // 001A RET 0
+ 0x4C140000, // 0003 LDNIL R5
+ 0x20140805, // 0004 NE R5 R4 R5
+ 0x78160009, // 0005 JMPF R5 #0010
+ 0x4C140000, // 0006 LDNIL R5
+ 0x20140605, // 0007 NE R5 R3 R5
+ 0x78160004, // 0008 JMPF R5 #000E
+ 0x5C140600, // 0009 MOVE R5 R3
+ 0x5C180800, // 000A MOVE R6 R4
+ 0x881C05A6, // 000B GETMBR R7 R2 K166
+ 0x5C200200, // 000C MOVE R8 R1
+ 0x7C140600, // 000D CALL R5 3
+ 0x50140200, // 000E LDBOOL R5 1 0
+ 0x80040A00, // 000F RET 1 R5
+ 0x50140000, // 0010 LDBOOL R5 0 0
+ 0x80040A00, // 0011 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: event
+********************************************************************/
+be_local_closure(class_Tasmota_event, /* name */
+ be_nested_proto(
+ 19, /* nstack */
+ 6, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_event,
+ &be_const_str_solidified,
+ ( &(const binstruction[112]) { /* code */
+ 0x1C1803A7, // 0000 EQ R6 R1 K167
+ 0x781A0005, // 0001 JMPF R6 #0008
+ 0x8818011C, // 0002 GETMBR R6 R0 K28
+ 0x781A0001, // 0003 JMPF R6 #0006
+ 0x8C1801A8, // 0004 GETMET R6 R0 K168
+ 0x7C180200, // 0005 CALL R6 1
+ 0x8C1801A9, // 0006 GETMET R6 R0 K169
+ 0x7C180200, // 0007 CALL R6 1
+ 0x1C1803AA, // 0008 EQ R6 R1 K170
+ 0x781A0001, // 0009 JMPF R6 #000C
+ 0x8C1801AB, // 000A GETMET R6 R0 K171
+ 0x7C180200, // 000B CALL R6 1
+ 0x50180000, // 000C LDBOOL R6 0 0
+ 0x501C0000, // 000D LDBOOL R7 0 0
+ 0x1C2003AC, // 000E EQ R8 R1 K172
+ 0x78220000, // 000F JMPF R8 #0011
+ 0x501C0200, // 0010 LDBOOL R7 1 0
+ 0x1C2003AD, // 0011 EQ R8 R1 K173
+ 0x78220006, // 0012 JMPF R8 #001A
+ 0x8C2001AE, // 0013 GETMET R8 R0 K174
+ 0x5C280400, // 0014 MOVE R10 R2
+ 0x5C2C0600, // 0015 MOVE R11 R3
+ 0x5C300800, // 0016 MOVE R12 R4
+ 0x7C200800, // 0017 CALL R8 4
+ 0x80041000, // 0018 RET 1 R8
+ 0x7002004F, // 0019 JMP #006A
+ 0x1C2003AF, // 001A EQ R8 R1 K175
+ 0x78220004, // 001B JMPF R8 #0021
+ 0x8C2001B0, // 001C GETMET R8 R0 K176
+ 0x5C280800, // 001D MOVE R10 R4
+ 0x7C200400, // 001E CALL R8 2
+ 0x80041000, // 001F RET 1 R8
+ 0x70020048, // 0020 JMP #006A
+ 0x1C200348, // 0021 EQ R8 R1 K72
+ 0x78220007, // 0022 JMPF R8 #002B
+ 0x8C2001B1, // 0023 GETMET R8 R0 K177
+ 0x5C280800, // 0024 MOVE R10 R4
+ 0x602C0017, // 0025 GETGBL R11 G23
+ 0x5C300600, // 0026 MOVE R12 R3
+ 0x7C2C0200, // 0027 CALL R11 1
+ 0x7C200600, // 0028 CALL R8 3
+ 0x80041000, // 0029 RET 1 R8
+ 0x7002003E, // 002A JMP #006A
+ 0x1C20037C, // 002B EQ R8 R1 K124
+ 0x78220003, // 002C JMPF R8 #0031
+ 0x8C20017C, // 002D GETMET R8 R0 K124
+ 0x7C200200, // 002E CALL R8 1
+ 0x80041000, // 002F RET 1 R8
+ 0x70020038, // 0030 JMP #006A
+ 0x88200149, // 0031 GETMBR R8 R0 K73
+ 0x78220036, // 0032 JMPF R8 #006A
+ 0xA422E000, // 0033 IMPORT R8 K112
+ 0x58240004, // 0034 LDCONST R9 K4
+ 0x6028000C, // 0035 GETGBL R10 G12
+ 0x882C0149, // 0036 GETMBR R11 R0 K73
+ 0x7C280200, // 0037 CALL R10 1
+ 0x1428120A, // 0038 LT R10 R9 R10
+ 0x782A002F, // 0039 JMPF R10 #006A
+ 0x88280149, // 003A GETMBR R10 R0 K73
+ 0x94281409, // 003B GETIDX R10 R10 R9
+ 0x8C2C1172, // 003C GETMET R11 R8 K114
+ 0x5C341400, // 003D MOVE R13 R10
+ 0x5C380200, // 003E MOVE R14 R1
+ 0x7C2C0600, // 003F CALL R11 3
+ 0x60300004, // 0040 GETGBL R12 G4
+ 0x5C341600, // 0041 MOVE R13 R11
+ 0x7C300200, // 0042 CALL R12 1
+ 0x1C301928, // 0043 EQ R12 R12 K40
+ 0x78320022, // 0044 JMPF R12 #0068
+ 0xA8020011, // 0045 EXBLK 0 #0058
+ 0x5C301600, // 0046 MOVE R12 R11
+ 0x5C341400, // 0047 MOVE R13 R10
+ 0x5C380400, // 0048 MOVE R14 R2
+ 0x5C3C0600, // 0049 MOVE R15 R3
+ 0x5C400800, // 004A MOVE R16 R4
+ 0x5C440A00, // 004B MOVE R17 R5
+ 0x7C300A00, // 004C CALL R12 5
+ 0x74320001, // 004D JMPT R12 #0050
+ 0x741A0000, // 004E JMPT R6 #0050
+ 0x50180001, // 004F LDBOOL R6 0 1
+ 0x50180200, // 0050 LDBOOL R6 1 0
+ 0x781A0003, // 0051 JMPF R6 #0056
+ 0x5C300E00, // 0052 MOVE R12 R7
+ 0x74320001, // 0053 JMPT R12 #0056
+ 0xA8040001, // 0054 EXBLK 1 1
+ 0x70020013, // 0055 JMP #006A
+ 0xA8040001, // 0056 EXBLK 1 1
+ 0x7002000F, // 0057 JMP #0068
+ 0xAC300002, // 0058 CATCH R12 0 2
+ 0x7002000C, // 0059 JMP #0067
+ 0x60380001, // 005A GETGBL R14 G1
+ 0x603C0018, // 005B GETGBL R15 G24
+ 0x584000B2, // 005C LDCONST R16 K178
+ 0x5C441800, // 005D MOVE R17 R12
+ 0x5C481A00, // 005E MOVE R18 R13
+ 0x7C3C0600, // 005F CALL R15 3
+ 0x7C380200, // 0060 CALL R14 1
+ 0x88380176, // 0061 GETMBR R14 R0 K118
+ 0x783A0002, // 0062 JMPF R14 #0066
+ 0xA43AEE00, // 0063 IMPORT R14 K119
+ 0x8C3C1DB3, // 0064 GETMET R15 R14 K179
+ 0x7C3C0200, // 0065 CALL R15 1
+ 0x70020000, // 0066 JMP #0068
+ 0xB0080000, // 0067 RAISE 2 R0 R0
+ 0x0024132D, // 0068 ADD R9 R9 K45
+ 0x7001FFCA, // 0069 JMP #0035
+ 0x1C2003B4, // 006A EQ R8 R1 K180
+ 0x78220002, // 006B JMPF R8 #006F
+ 0xA4236A00, // 006C IMPORT R8 K181
+ 0x8C241125, // 006D GETMET R9 R8 K37
+ 0x7C240200, // 006E CALL R9 1
+ 0x80040C00, // 006F RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_cmd
+********************************************************************/
+be_local_closure(class_Tasmota_remove_cmd, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_remove_cmd,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x88080116, // 0000 GETMBR R2 R0 K22
+ 0x780A0003, // 0001 JMPF R2 #0006
+ 0x88080116, // 0002 GETMBR R2 R0 K22
+ 0x8C080531, // 0003 GETMET R2 R2 K49
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_driver
+********************************************************************/
+be_local_closure(class_Tasmota_add_driver, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_add_driver,
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x60080004, // 0000 GETGBL R2 G4
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x20080557, // 0003 NE R2 R2 K87
+ 0x780A0000, // 0004 JMPF R2 #0006
+ 0xB00653B6, // 0005 RAISE 1 K41 K182
+ 0x88080149, // 0006 GETMBR R2 R0 K73
+ 0x780A000B, // 0007 JMPF R2 #0014
+ 0x88080149, // 0008 GETMBR R2 R0 K73
+ 0x8C08050C, // 0009 GETMET R2 R2 K12
+ 0x5C100200, // 000A MOVE R4 R1
+ 0x7C080400, // 000B CALL R2 2
+ 0x4C0C0000, // 000C LDNIL R3
+ 0x1C080403, // 000D EQ R2 R2 R3
+ 0x780A0003, // 000E JMPF R2 #0013
+ 0x88080149, // 000F GETMBR R2 R0 K73
+ 0x8C08051D, // 0010 GETMET R2 R2 K29
+ 0x5C100200, // 0011 MOVE R4 R1
+ 0x7C080400, // 0012 CALL R2 2
+ 0x70020003, // 0013 JMP #0018
+ 0x60080012, // 0014 GETGBL R2 G18
+ 0x7C080000, // 0015 CALL R2 0
+ 0x400C0401, // 0016 CONNECT R3 R2 R1
+ 0x90029202, // 0017 SETMBR R0 K73 R2
+ 0x80000000, // 0018 RET 0
})
)
);
@@ -2933,68 +3218,71 @@ be_local_closure(class_Tasmota_add_cron, /* name */
be_local_class(Tasmota,
15,
NULL,
- be_nested_map(60,
+ be_nested_map(63,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key(wire1, -1), be_const_var(8) },
- { be_const_key(wd, 42), be_const_var(13) },
- { be_const_key(int, 48), be_const_static_closure(class_Tasmota_int_closure) },
- { be_const_key(add_cron, -1), be_const_closure(class_Tasmota_add_cron_closure) },
- { be_const_key(run_deferred, -1), be_const_closure(class_Tasmota_run_deferred_closure) },
- { be_const_key(try_rule, -1), be_const_closure(class_Tasmota_try_rule_closure) },
- { be_const_key(run_timers, -1), be_const_closure(class_Tasmota_run_timers_closure) },
- { be_const_key(defer, -1), be_const_closure(class_Tasmota_defer_closure) },
- { be_const_key(is_network_up, 31), be_const_closure(class_Tasmota_is_network_up_closure) },
- { be_const_key(hs2rgb, -1), be_const_closure(class_Tasmota_hs2rgb_closure) },
- { be_const_key(_defer, -1), be_const_var(3) },
- { be_const_key(add_driver, 36), be_const_closure(class_Tasmota_add_driver_closure) },
- { be_const_key(exec_rules, -1), be_const_closure(class_Tasmota_exec_rules_closure) },
- { be_const_key(set_timer, 6), be_const_closure(class_Tasmota_set_timer_closure) },
- { be_const_key(global, -1), be_const_var(11) },
- { be_const_key(init, -1), be_const_closure(class_Tasmota_init_closure) },
- { be_const_key(settings, 34), be_const_var(12) },
+ { be_const_key(read_extension_manifest, -1), be_const_closure(class_Tasmota_read_extension_manifest_closure) },
+ { be_const_key(add_driver, 58), be_const_closure(class_Tasmota_add_driver_closure) },
+ { be_const_key(int, -1), be_const_static_closure(class_Tasmota_int_closure) },
{ be_const_key(find_list_i, -1), be_const_closure(class_Tasmota_find_list_i_closure) },
- { be_const_key(compile, -1), be_const_closure(class_Tasmota_compile_closure) },
- { be_const_key(add_cmd, 30), be_const_closure(class_Tasmota_add_cmd_closure) },
- { be_const_key(_timers, -1), be_const_var(2) },
- { be_const_key(run_network_up, 52), be_const_closure(class_Tasmota_run_network_up_closure) },
- { be_const_key(remove_cmd, 47), be_const_closure(class_Tasmota_remove_cmd_closure) },
- { be_const_key(remove_fast_loop, -1), be_const_closure(class_Tasmota_remove_fast_loop_closure) },
{ be_const_key(when_network_up, -1), be_const_closure(class_Tasmota_when_network_up_closure) },
- { be_const_key(_drivers, 21), be_const_var(6) },
- { be_const_key(find_key_i, -1), be_const_closure(class_Tasmota_find_key_i_closure) },
- { be_const_key(check_not_method, -1), be_const_closure(class_Tasmota_check_not_method_closure) },
- { be_const_key(remove_driver, 24), be_const_closure(class_Tasmota_remove_driver_closure) },
- { be_const_key(add_rule_once, -1), be_const_closure(class_Tasmota_add_rule_once_closure) },
- { be_const_key(exec_cmd, -1), be_const_closure(class_Tasmota_exec_cmd_closure) },
- { be_const_key(remove_rule, -1), be_const_closure(class_Tasmota_remove_rule_closure) },
- { be_const_key(set_light, 44), be_const_closure(class_Tasmota_set_light_closure) },
- { be_const_key(_ccmd, -1), be_const_var(5) },
- { be_const_key(find_op, 20), be_const_closure(class_Tasmota_find_op_closure) },
- { be_const_key(run_cron, -1), be_const_closure(class_Tasmota_run_cron_closure) },
- { be_const_key(gc, -1), be_const_closure(class_Tasmota_gc_closure) },
- { be_const_key(time_str, -1), be_const_closure(class_Tasmota_time_str_closure) },
- { be_const_key(event, -1), be_const_closure(class_Tasmota_event_closure) },
- { be_const_key(cmd, 38), be_const_closure(class_Tasmota_cmd_closure) },
- { be_const_key(wire_scan, -1), be_const_closure(class_Tasmota_wire_scan_closure) },
- { be_const_key(exec_tele, -1), be_const_closure(class_Tasmota_exec_tele_closure) },
- { be_const_key(wire2, -1), be_const_var(9) },
- { be_const_key(add_rule, 17), be_const_closure(class_Tasmota_add_rule_closure) },
- { be_const_key(_fl, 37), be_const_var(0) },
- { be_const_key(_debug_present, -1), be_const_var(14) },
- { be_const_key(add_fast_loop, -1), be_const_closure(class_Tasmota_add_fast_loop_closure) },
- { be_const_key(cmd_res, 54), be_const_var(10) },
- { be_const_key(fast_loop, -1), be_const_closure(class_Tasmota_fast_loop_closure) },
- { be_const_key(load, -1), be_const_closure(class_Tasmota_load_closure) },
- { be_const_key(urlfetch, -1), be_const_closure(class_Tasmota_urlfetch_closure) },
- { be_const_key(gen_cb, -1), be_const_closure(class_Tasmota_gen_cb_closure) },
- { be_const_key(_rules, -1), be_const_var(1) },
- { be_const_key(urlfetch_cmd, -1), be_const_closure(class_Tasmota_urlfetch_cmd_closure) },
+ { be_const_key(wire1, 8), be_const_var(8) },
+ { be_const_key(compile, -1), be_const_closure(class_Tasmota_compile_closure) },
+ { be_const_key(add_fast_loop, 24), be_const_closure(class_Tasmota_add_fast_loop_closure) },
+ { be_const_key(is_network_up, -1), be_const_closure(class_Tasmota_is_network_up_closure) },
{ be_const_key(remove_cron, -1), be_const_closure(class_Tasmota_remove_cron_closure) },
- { be_const_key(remove_timer, -1), be_const_closure(class_Tasmota_remove_timer_closure) },
- { be_const_key(get_light, 4), be_const_closure(class_Tasmota_get_light_closure) },
- { be_const_key(next_cron, 3), be_const_closure(class_Tasmota_next_cron_closure) },
- { be_const_key(_wnu, 1), be_const_var(7) },
- { be_const_key(_crons, 0), be_const_var(4) },
+ { be_const_key(exec_cmd, 3), be_const_closure(class_Tasmota_exec_cmd_closure) },
+ { be_const_key(set_light, 12), be_const_closure(class_Tasmota_set_light_closure) },
+ { be_const_key(time_str, 57), be_const_closure(class_Tasmota_time_str_closure) },
+ { be_const_key(remove_timer, 20), be_const_closure(class_Tasmota_remove_timer_closure) },
+ { be_const_key(hs2rgb, 41), be_const_closure(class_Tasmota_hs2rgb_closure) },
+ { be_const_key(cmd, -1), be_const_closure(class_Tasmota_cmd_closure) },
+ { be_const_key(exec_tele, -1), be_const_closure(class_Tasmota_exec_tele_closure) },
+ { be_const_key(remove_rule, 30), be_const_closure(class_Tasmota_remove_rule_closure) },
+ { be_const_key(wd, -1), be_const_var(13) },
+ { be_const_key(add_cmd, -1), be_const_closure(class_Tasmota_add_cmd_closure) },
+ { be_const_key(find_op, 9), be_const_closure(class_Tasmota_find_op_closure) },
+ { be_const_key(add_cron, 37), be_const_closure(class_Tasmota_add_cron_closure) },
+ { be_const_key(_defer, -1), be_const_var(3) },
+ { be_const_key(global, 16), be_const_var(11) },
+ { be_const_key(settings, 54), be_const_var(12) },
+ { be_const_key(run_network_up, -1), be_const_closure(class_Tasmota_run_network_up_closure) },
+ { be_const_key(_rules, -1), be_const_var(1) },
+ { be_const_key(gen_cb, 14), be_const_closure(class_Tasmota_gen_cb_closure) },
+ { be_const_key(wire_scan, -1), be_const_closure(class_Tasmota_wire_scan_closure) },
+ { be_const_key(add_extension, -1), be_const_closure(class_Tasmota_add_extension_closure) },
+ { be_const_key(gc, -1), be_const_closure(class_Tasmota_gc_closure) },
+ { be_const_key(wire2, -1), be_const_var(9) },
+ { be_const_key(run_deferred, 48), be_const_closure(class_Tasmota_run_deferred_closure) },
+ { be_const_key(init, -1), be_const_closure(class_Tasmota_init_closure) },
+ { be_const_key(defer, -1), be_const_closure(class_Tasmota_defer_closure) },
+ { be_const_key(set_timer, -1), be_const_closure(class_Tasmota_set_timer_closure) },
+ { be_const_key(next_cron, -1), be_const_closure(class_Tasmota_next_cron_closure) },
+ { be_const_key(exec_rules, -1), be_const_closure(class_Tasmota_exec_rules_closure) },
+ { be_const_key(unload_extension, -1), be_const_closure(class_Tasmota_unload_extension_closure) },
+ { be_const_key(add_rule_once, 50), be_const_closure(class_Tasmota_add_rule_once_closure) },
+ { be_const_key(cmd_res, -1), be_const_var(10) },
+ { be_const_key(_ccmd, 29), be_const_var(5) },
+ { be_const_key(add_rule, -1), be_const_closure(class_Tasmota_add_rule_closure) },
+ { be_const_key(remove_driver, 42), be_const_closure(class_Tasmota_remove_driver_closure) },
+ { be_const_key(_fl, -1), be_const_var(0) },
+ { be_const_key(check_not_method, -1), be_const_closure(class_Tasmota_check_not_method_closure) },
+ { be_const_key(_drivers, -1), be_const_var(6) },
+ { be_const_key(find_key_i, 39), be_const_closure(class_Tasmota_find_key_i_closure) },
+ { be_const_key(get_light, -1), be_const_closure(class_Tasmota_get_light_closure) },
+ { be_const_key(load, 35), be_const_closure(class_Tasmota_load_closure) },
+ { be_const_key(fast_loop, 53), be_const_closure(class_Tasmota_fast_loop_closure) },
+ { be_const_key(_debug_present, -1), be_const_var(14) },
+ { be_const_key(run_timers, 26), be_const_closure(class_Tasmota_run_timers_closure) },
+ { be_const_key(urlfetch, -1), be_const_closure(class_Tasmota_urlfetch_closure) },
+ { be_const_key(_timers, -1), be_const_var(2) },
+ { be_const_key(_wnu, 18), be_const_var(7) },
+ { be_const_key(urlfetch_cmd, -1), be_const_closure(class_Tasmota_urlfetch_cmd_closure) },
+ { be_const_key(remove_fast_loop, -1), be_const_closure(class_Tasmota_remove_fast_loop_closure) },
+ { be_const_key(_crons, -1), be_const_var(4) },
+ { be_const_key(try_rule, -1), be_const_closure(class_Tasmota_try_rule_closure) },
+ { be_const_key(event, -1), be_const_closure(class_Tasmota_event_closure) },
+ { be_const_key(remove_cmd, -1), be_const_closure(class_Tasmota_remove_cmd_closure) },
+ { be_const_key(run_cron, 1), be_const_closure(class_Tasmota_run_cron_closure) },
})),
(bstring*) &be_const_str_Tasmota
);
diff --git a/tasmota/berry/extensions/Leds_Panel.tapp b/tasmota/berry/extensions/Leds_Panel.tapp
new file mode 100644
index 000000000..cba48be17
Binary files /dev/null and b/tasmota/berry/extensions/Leds_Panel.tapp differ
diff --git a/tasmota/berry/extensions/Leds_Panel/autoexec.be b/tasmota/berry/extensions/Leds_Panel/autoexec.be
new file mode 100644
index 000000000..40e36070e
--- /dev/null
+++ b/tasmota/berry/extensions/Leds_Panel/autoexec.be
@@ -0,0 +1,9 @@
+# rm Leds_Panel.tapp; zip -j -0 Leds_Panel.tapp Leds_Panel/autoexec.be Leds_Panel/leds_panel.be Leds_Panel/manifest.json
+do # embed in `do` so we don't add anything to global namespace
+ import introspect
+ var leds_panel = introspect.module('leds_panel', true) # load module but don't cache
+ tasmota.add_extension(leds_panel)
+end
+
+# to remove:
+# tasmota.unload_extension('Leds Panel')
diff --git a/tasmota/berry/extensions/Leds_Panel/leds_panel.be b/tasmota/berry/extensions/Leds_Panel/leds_panel.be
new file mode 100644
index 000000000..f8aaa9412
--- /dev/null
+++ b/tasmota/berry/extensions/Leds_Panel/leds_panel.be
@@ -0,0 +1,1025 @@
+#
+# leds_panel.be - implements a real-time mirroring of the WS2812 leds on the main page
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
.
+#
+
+# make sure we use `webserver_async` if it's already solidified
+if !global.contains("webserver_async") || type(global.webserver_async) != 'class'
+ class webserver_async
+ #############################################################
+ # class webserver_async_cnx
+ #
+ # This instance represents an active connection between
+ # the server and a client (TCP connection)
+ #############################################################
+ static class webserver_async_cnx
+ var server # link to server object
+ var cnx # holds the tcpclientasync instance
+ var close_after_send # if true, close after we finished sending the out_buffer
+ var fastloop_cb # cb for fastloop
+ var buf_in # incoming buffer
+ var buf_in_offset
+ var buf_out
+ var phase # parsing phase: 0/ status line, 1/ headers, 2/ payload
+ # request
+ var req_verb # verb for request (we support only GET)
+ var req_uri # URI for request
+ var req_version # HTTP version for request
+ var header_host # 'Host' header - useful for redirections
+ # response
+ var resp_headers # (string) aggregate headers
+ var chunked # if true enable chunked encoding (default true)
+ # conversion
+ static var CODE_TO_STRING = {
+ # 100: "Continue",
+ 200: "OK",
+ # 204: "No Content",
+ 301: "Moved Permanently",
+ # 400: "Bad Request",
+ # 401: "Unauthorized",
+ # 403: "Payment Required", # not sure it's useful in Tasmota context
+ 404: "Not Found",
+ 500: "Internal Server Error",
+ # 501: "Not Implemented"
+ }
+
+ #############################################################
+ # init
+ #
+ # Called when a new connection is received from a client
+ # Arg:
+ # - server : main instance of `webserver_async` server
+ # - cnx : instance of `tcpclientasync`
+ #
+ # By default:
+ # version is HTTP/1.1
+ # response is chunked-encoded
+ def init(server, cnx)
+ self.server = server
+ self.cnx = cnx
+ self.buf_in = ''
+ self.buf_in_offset = 0
+ self.buf_out = bytes()
+ self.phase = 0 # 0 = status line
+ # util
+ self.close_after_send = false
+ # response
+ self.resp_headers = ''
+ self.chunked = true
+ # register cb
+ self.fastloop_cb = def () self.loop() end # the closure needs to be kept, to allow removal of fast_loop later
+ tasmota.add_fast_loop(self.fastloop_cb)
+ end
+
+ #############################################################
+ # set_chunked: sets whether the response is chunked encoded
+ # true by default
+ #
+ def set_chunked(chunked)
+ self.chunked = bool(chunked)
+ end
+
+ #############################################################
+ # connected: returns `true` if the connection is still open
+ #
+ def connected()
+ return self.cnx ? self.cnx.connected() : false
+ end
+
+ #############################################################
+ # buf_out_empty: returns `true` if out buffer is empty,
+ # i.e. all content was sent to client
+ #
+ def buf_out_empty()
+ return size(self.buf_out) == 0
+ end
+
+ #############################################################
+ # _write: (internal method) write bytes
+ #
+ # Arg:
+ # v must be bytes()
+ #
+ def _write(v)
+ var sz_v = size(v)
+ if (sz_v == 0) return end # do nothing if empty content
+
+ var buf_out = self.buf_out # keep a copy of reference in local variable (avoids multiple dereferencing)
+ var buf_out_sz = size(buf_out)
+ buf_out.resize(buf_out_sz + sz_v)
+ buf_out.setbytes(buf_out_sz, v)
+
+ self._send() # try sending `self.buf_out` now
+ end
+
+ #############################################################
+ # close: close the connection to client
+ #
+ # Can be called multiple times
+ # Does nothing if connection is already closed
+ #
+ def close()
+ # log(f"WEB: closing cnx", 3)
+ if (self.cnx != nil) self.cnx.close() end
+ self.cnx = nil
+ end
+
+ #############################################################
+ # loop: called by fastloop every 5 ms
+ #
+ def loop()
+ if self.cnx == nil # if connection is closed, this instance is marked for deletion
+ tasmota.remove_fast_loop(self.fastloop_cb) # remove from fast_loop
+ self.fastloop_cb = nil # fastloop_cb can be garbage collected
+ return
+ end
+
+ self._send() # try sending any pending output data
+
+ var cnx = self.cnx # keep copy
+ if (cnx == nil) return end # it's possible that it was closed after _send()
+
+ # any new incoming data received?
+ if cnx.available() > 0
+ var buf_in_new = cnx.read() # read bytes() object
+ if (!self.buf_in) # use the same instance if none present
+ self.buf_in = buf_in_new
+ else # or append to current incoming buffer
+ self.buf_in += buf_in_new
+ end
+ end
+
+ # parse incoming data if any
+ if (self.buf_in)
+ self.parse()
+ end
+ end
+
+ #############################################################
+ # _send: (internal method) try sending pendin data out
+ #
+ # the content is in `self.buf_out`
+ #
+ def _send()
+ # any data waiting to go out?
+ var cnx = self.cnx
+ if (cnx == nil) return end # abort if connection is closed
+
+ var buf_out = self.buf_out # keep reference in local variable
+ if size(buf_out) > 0
+ if cnx.listening() # is the client ready to receive?
+ var sent = cnx.write(buf_out) # send the buffer, `sent` contains the number of bytes actually sent
+ if sent > 0 # did we succeed in sending anything?
+ # we did sent something
+ if sent >= size(buf_out) # the entire buffer was sent, clear it
+ # all sent
+ self.buf_out.clear()
+ else # buffer was sent partially, remove what was sent from `out_buf`
+ # remove the first bytes already sent
+ self.buf_out.setbytes(0, buf_out, sent) # copy to index 0 (start of buffer), content from the same buffer starting at offset 'sent'
+ self.buf_out.resize(size(buf_out) - sent) # shrink buffer
+ end
+ end
+ end
+ else
+ # empty buffer, do the cleaning
+ # self.buf_out.clear() # TODO not needed?
+ # self.buf_in_offset = 0 # TODO really useful?
+
+ if self.close_after_send # close connection if we have sent everything
+ self.close()
+ end
+ end
+ end
+
+ #############################################################
+ # parse incoming
+ #
+ # pre: self.buf_in is not empty
+ # post: self.buf_in has made progress (smaller or '')
+ def parse()
+ # log(f"WEB: incoming {bytes().fromstring(self.buf_in).tohex()}", 3)
+ if self.phase == 0
+ self.parse_http_req_line()
+ elif self.phase == 1
+ self.parse_http_headers()
+ elif self.phase == 2
+ self.parse_http_payload()
+ end
+ end
+
+ #############################################################
+ # parse incoming request
+ #
+ # pre: self.buf_in is not empty
+ # post: self.buf_in has made progress (smaller or '')
+ def parse_http_req_line()
+ var m = global._re_http_srv.match2(self.buf_in, self.buf_in_offset)
+ # Ex: "GET / HTTP/1.1\r\n"
+ if m
+ var offset = m[0]
+ self.req_verb = m[1] # GET/POST...
+ self.req_uri = m[2] # /
+ self.req_version = m[3] # "1.0" or "1.1"
+ self.phase = 1 # proceed to parsing headers
+ self.buf_in = self.buf_in[offset .. ] # remove what we parsed
+ if tasmota.loglevel(4)
+ log(f"WEB: HTTP verb: {self.req_verb} URI: '{self.req_uri}' Version:{self.req_version}", 4)
+ end
+ self.parse_http_headers()
+ elif size(self.buf_in) > 100 # if no match and we still have 100 bytes, then it fails
+ log("WEB: error invalid request", 4)
+ self.close()
+ self.buf_in = ''
+ end
+ end
+
+ #############################################################
+ # parse incoming headers
+ def parse_http_headers()
+ while true
+ # print("parse_http_headers", "self.buf_in_offset=", self.buf_in_offset)
+ var m = global._re_http_srv_header.match2(self.buf_in, self.buf_in_offset)
+ # print("m=", m)
+ # Ex: [32, 'Content-Type', 'application/json']
+ if m
+ self.event_http_header(m[1], m[2])
+ self.buf_in_offset += m[0]
+ else # no more headers
+ var m2 = global._re_http_srv_body.match2(self.buf_in, self.buf_in_offset)
+ if m2
+ # end of headers
+ # we keep \r\n which is used by pattern
+ self.buf_in = self.buf_in[self.buf_in_offset + m2[0] .. ] # truncate
+ self.buf_in_offset = 0
+
+ # self.event_http_headers_end() # no more headers
+ self.phase = 2
+ self.parse_http_payload() # continue to parsing payload
+ end
+ if size(self.buf_in) > 1024 # we don't accept a single header larger than 1KB
+ log("WEB: error header is bigger than 1KB", 4)
+ self.close()
+ self.buf_in = ''
+ end
+ return
+ end
+ end
+
+ end
+
+ #############################################################
+ # event_http_header: method called for each header received
+ #
+ # Default implementation only stores "Host" header
+ # and ignores all other headers
+ #
+ # Args:
+ # header_key: string
+ # header_value: string
+ #
+ def event_http_header(header_key, header_value)
+ # log(f"WEB: header key '{header_key}' = '{header_value}'")
+
+ if (header_key == "Host")
+ self.header_host = header_value
+ end
+ end
+
+ #############################################################
+ # event_http_headers_end: called afte all headers are received
+ #
+ # By default does nothing
+ #
+ # def event_http_headers_end()
+ # end
+
+ #############################################################
+ # parse incoming payload (if any)
+ #
+ # Calls the server's dispatcher with 'verb' and 'uri'
+ #
+ # Payload is in `self.buf_in`
+ #
+ def parse_http_payload()
+ # log(f"WEB: parsing payload '{bytes().fromstring(self.buf_in).tohex()}'")
+ # dispatch request before parsing payload
+ self.server.dispatch(self, self.req_uri, self.req_verb)
+ end
+
+
+ #############################################################
+ # Responses
+ #############################################################
+ # send_header: add header to the response
+ #
+ # Args:
+ # name: key of header
+ # value: value of header
+ # first: if 'true' prepend, or append if 'false'
+ def send_header(name, value, first)
+ if first
+ self.resp_headers = f"{name}: {value}\r\n{self.resp_headers}"
+ else
+ self.resp_headers = f"{self.resp_headers}{name}: {value}\r\n"
+ end
+ end
+
+ #############################################################
+ # send: send response to client
+ #
+ # Args
+ # code: (int) http code (ex: 200)
+ # content_type: (string, opt) MIME type, "text/html" if not specified
+ # content: (bytes or string, opt) first content to send to client (you can send more later)
+ #
+ def send(code, content_type, content)
+ var response = f"HTTP/1.1 {code} {self.CODE_TO_STRING.find(code, 'UNKNOWN')}\r\n"
+ self.send_header("Content-Type", content_type ? content_type : "text/html", true)
+
+ self.send_header("Accept-Ranges", "none")
+ # chunked encoding?
+ if self.chunked
+ self.send_header("Transfer-Encoding", "chunked")
+ end
+ # cors?
+ if self.server.cors
+ self.send_header("Access-Control-Allow-Origin", "*")
+ self.send_header("Access-Control-Allow-Methods", "*")
+ self.send_header("Access-Control-Allow-Headers", "*")
+ end
+ # others
+ self.send_header("Connection", "close")
+
+ response += self.resp_headers
+ response += "\r\n"
+ self.resp_headers = nil
+
+ # send status-line and headers
+ self.write_raw(response)
+
+ # send first part of content
+ if (content) self.write(content) end
+ end
+
+ #############################################################
+ # write: writes a bytes or string piece of content
+ #
+ # If chunked encoding is enabled, it is sent as a separate chunk
+ #
+ # If content is empty, it can be sent as an empty chunk
+ # which is an indicator of end-of-content
+ #
+ def write(v)
+ if type(v) == 'string' # if string, convert to bytes
+ v = bytes().fromstring(v)
+ end
+
+ # use chunk encoding
+ if self.chunked
+ var p1 = self.server.p1
+ p1.clear()
+ p1.append(f"{size(v):X}\r\n")
+ p1.append(v)
+ p1.append("\r\n")
+
+ # log(f"WEB: sending chunk '{p1.tohex()}'")
+ self._write(p1)
+ else
+ self._write(v)
+ end
+ end
+
+ #############################################################
+ # write_raw: low-level write of string or bytes (without chunk encoding)
+ #
+ # If content is empty, nothing is sent
+ #
+ def write_raw(v)
+ if (size(v) == 0) return end
+
+ if type(v) == 'string' # if string, convert to bytes
+ v = bytes().fromstring(v)
+ end
+
+ self._write(v)
+ end
+
+ #############################################################
+ # content_stop: signal that the response is finished
+ #
+ def content_stop()
+ self.write('') # send 'end-of-content' for chunked encoding
+ self.close_after_send = true # close connection when everything was sent to client
+ end
+ end
+
+ #######################################################################
+ # class webserver_async_dispatcher
+ #
+ # Pre-register callbacks triggered when a certain URL is accessed
+ #
+ # You can register either a pure function or a method and an instance
+ #
+ # Pure function:
+ # webserver_async_dispatcher(uri_prefix, nil, func, verb)
+ # will call:
+ # func(cnx, uri, verb)
+ #
+ # Instance and method:
+ # webserver_async_dispatcher(uri_prefix, instance, method, verb)
+ # will call:
+ # insatnce.method(cnx, uri, verb)
+ #
+ # Args in:
+ # uri_prefix: prefix string for matchin URI, must start with '/'
+ # cb_obj: 'nil' for pure function or instance from which we call a method
+ # cb_mth: pure function or method to call
+ # verb: verb to match, only supported: 'GET' or 'nil' for any
+ #
+ # Args of callback:
+ # cnx: instance of 'webserver_async_cnx' for the current connection
+ # uri: full uri of request
+ # verb: verb received (currently only GET is supported)
+ #######################################################################
+ static class webserver_async_dispatcher
+ var uri_prefix # prefix string, must start with '/'
+ var verb # verb to match, or nil for ANY
+ var cb_obj # callback object (sent as first argument if not 'nil')
+ var cb_mth # callback function
+
+ def init(uri_prefix, cb_obj, cb_mth, verb)
+ self.uri_prefix = uri_prefix
+ self.cb_obj = cb_obj
+ self.cb_mth = cb_mth
+ self.verb = verb
+ end
+
+ # return true if matched
+ def dispatch(cnx, uri, verb)
+ import string
+ if string.find(uri, self.uri_prefix) == 0
+ var match = false
+ if (self.verb == nil) || (self.verb == verb)
+ # method is valid
+ var cb_obj = self.cb_obj
+ if (cb_obj != nil)
+ self.cb_mth(self.cb_obj, cnx, uri, verb)
+ else
+ self.cb_mth(cnx, uri, verb)
+ end
+ return true
+ end
+ end
+ return false
+ end
+ end
+
+ #############################################################
+ # class webserver_async
+ #
+ # This is the main class to call
+ #############################################################
+ var local_port # listening port, 80 is already used by Tasmota
+ var server # instance of `tcpserver`
+ var fastloop_cb # closure used by fastloop
+ # var timeout # default timeout for tcp connection
+ var connections # list of active connections
+ # var auth # web authentication string (Basic Auth) or `nil`, in format `user:password` as bade64
+ # var cmd # GET url command
+ var dispatchers
+ # copied in each connection
+ var chunked # if true enable chunked encoding (default true)
+ var cors # if true send CORS headers (default false)
+ #
+ var p1 # temporary object bytes() to avoid reallocation
+
+ # static var TIMEOUT = 1000 # default timeout: 1000ms
+ # static var HTTP_REQ = "^(\\w+) (\\S+) HTTP\\/(\\d\\.\\d)\r\n"
+ # static var HTTP_HEADER_REGEX = "([A-Za-z0-9-]+): (.*?)\r\n" # extract a header with its 2 parts
+ # static var HTTP_BODY_REGEX = "\r\n" # end of headers
+
+ #############################################################
+ # init
+ def init(port, timeout)
+ # if (timeout == nil) timeout = self.TIMEOUT end
+ # if (timeout == nil) timeout = 1000 end
+ self.connections = []
+ self.dispatchers = []
+ self.server = tcpserver(port) # throws an exception if port is not available
+ self.chunked = true
+ self.cors = false
+ self.p1 = bytes(100) # reserve 100 bytes by default
+ # TODO what about max_clients ?
+ self.compile_re()
+ # register cb
+ tasmota.add_driver(self)
+ self.fastloop_cb = def () self.loop() end
+ tasmota.add_fast_loop(self.fastloop_cb)
+ end
+
+ #############################################################
+ # compile once for all the regex
+ def compile_re()
+ import re
+ if !global.contains("_re_http_srv")
+ # global._re_http_srv = re.compile(self.HTTP_REQ)
+ # global._re_http_srv_header = re.compile(self.HTTP_HEADER_REGEX)
+ # global._re_http_srv_body = re.compile(self.HTTP_BODY_REGEX)
+ global._re_http_srv = re.compile("^(\\w+) (\\S+) HTTP\\/(\\d\\.\\d)\r\n")
+ global._re_http_srv_header = re.compile("([A-Za-z0-9-]+): (.*?)\r\n")
+ global._re_http_srv_body = re.compile("\r\n")
+ end
+ end
+
+ #############################################################
+ # enable or disable chunked mode (enabled by default)
+ def set_chunked(chunked)
+ self.chunked = bool(chunked)
+ end
+
+ #############################################################
+ # enable or disable CORS mode (enabled by default)
+ def set_cors(cors)
+ self.cors = bool(cors)
+ end
+
+ #############################################################
+ # Helper function to encode integer as hex (uppercase)
+ static def bytes_format_hex(b, i, default)
+ b.clear()
+ if (i == nil) b .. default return end
+ # sanity check
+ if (i < 0) i = -i end
+ if (i < 0) return end # special case for MININT
+ if (i == 0) b.resize(1) b[0] = 0x30 return end # return bytes("30")
+
+ b.resize(8)
+ var len = 0
+ while i > 0
+ var digit = i & 0x0F
+ if (digit < 10)
+ b[len] = 0x30 + digit
+ else
+ b[len] = 0x37 + digit # 0x37 = 0x41 ('A') - 10
+ end
+ len += 1
+ i = (i >> 4)
+ end
+ # reverse order
+ b.resize(len)
+ b.reverse()
+ end
+
+ #############################################################
+ # Helper function to encode integer as int
+ static def bytes_append_int(b, i, default)
+ var sz = size(b)
+ if (i == 0) # just append '0'
+ b.resize(sz + 1)
+ b[sz] = 0x30
+ elif (i != nil) # we have a non-zero value
+ var negative = false
+ # sanity check
+ if (i < 0) i = -i negative = true end
+ if (i < 0) return b end # special case for MININT
+
+ if negative
+ b.resize(sz + 1)
+ b[sz] = 0x2D
+ sz += 1
+ end
+
+ var start = sz
+ while i > 0
+ var digit = i % 10
+ b.resize(sz + 1)
+ b[sz] = 0x30 + digit
+ sz += 1
+ i = (i / 10)
+ end
+ # reverse order starting where the integer is
+ b.reverse(start)
+
+ else # i is `nil`, append default
+ b.append(default)
+ end
+ return b
+ end
+
+ #############################################################
+ # closing web server
+ def close()
+ tasmota.remove_driver(self)
+ tasmota.remove_fast_loop(self.fastloop_cb)
+ self.fastloop_cb = nil
+ self.server.close()
+
+ # close all active connections
+ for cnx: self.connections
+ cnx.close()
+ end
+ self.connections = nil # and free memory
+ end
+
+ #############################################################
+ # clean connections
+ #
+ # Remove any connections that is closed or in error
+ def clean_connections()
+ var idx = 0
+ while idx < size(self.connections)
+ var cnx = self.connections[idx]
+ # remove if not connected
+ if !cnx.connected()
+ # log("WEB: does not appear to be connected")
+ cnx.close()
+ self.connections.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ end
+
+ #############################################################
+ # called by fastloop
+ def loop()
+ self.clean_connections()
+ # check if any incoming connection
+ while self.server.hasclient()
+ # retrieve new client
+ var cnx = self.webserver_async_cnx(self, self.server.acceptasync())
+ cnx.set_chunked(self.chunked)
+ self.connections.push(cnx)
+ end
+ end
+
+ #############################################################
+ # add to dispatcher
+ def on(prefix, obj, mth, verb)
+ var dispatcher = self.webserver_async_dispatcher(prefix, obj, mth, verb)
+ self.dispatchers.push(dispatcher)
+ end
+
+ #############################################################
+ # add to dispatcher
+ def dispatch(cnx, uri, verb)
+ var idx = 0
+ while idx < size(self.dispatchers)
+ if (self.dispatchers[idx].dispatch(cnx, uri, verb))
+ return
+ end
+ idx += 1
+ end
+ # fallback unsupported request
+ cnx.send(500, "text/plain")
+ cnx.write("Unsupported")
+ cnx.content_stop()
+ end
+
+ end
+
+ # assign the class to a global
+ global.webserver_async = webserver_async
+end
+
+class leds_panel
+ var port
+ var web
+ var sampling_interval
+ var p1, p_leds
+ var strip # strip object
+ var h, w, cell_size, cell_space
+
+ static var EXT_NAME = "leds_panel"
+ static var SAMPLING = 100
+ static var PORT = 8886 # default port 8886
+ static var HTML_WIDTH = 290
+ static var HTML_HEAD1 =
+ ""
+ static var HTML_URL_F =
+ ""
+ static var HTML_HEAD2 =
+ ''
+ ''
+ ''
+ ''
+ static var HTML_CONTENT =
+ '
'
+ ''
+ ''
+ ' '
+ ' '
+ ' '
+ '
'
+ static var HTML_END =
+ ''
+ ''
+
+ def init(port)
+ import gpio
+ if !gpio.pin_used(gpio.WS2812, 0)
+ log("LED: no leds configured, can't start leds_panel", 3)
+ return
+ end
+ if (port == nil) port = self.PORT end
+ self.port = port
+
+ # start network part
+ if tasmota.is_network_up()
+ self.init_network()
+ else
+ tasmota.when_network_up(/ -> self.init_network())
+ end
+ end
+
+ def init_network()
+ self.web = global.webserver_async(self.port)
+ self.sampling_interval = self.SAMPLING
+
+ self.strip = Leds()
+ self.p1 = bytes(100)
+ self.p_leds = self.strip.pixels_buffer()
+
+ self.web.set_chunked(true)
+ self.web.set_cors(true)
+ self.web.on("/leds_feed", self, self.send_info_feed) # feed with leds values
+ self.web.on("/leds", self, self.send_info_page) # display leds page
+
+ tasmota.add_driver(self, self.EXT_NAME) # also register as `leds_panel` extension
+ end
+
+ #################################################################################
+ # unload
+ #
+ # Uninstall the extension and deallocate all resources
+ #################################################################################
+ def unload()
+ self.close() # stop server
+ tasmota.remove_driver(self) # remove driver, normally already done by tasmota.unload_ext
+ global.undef("webserver_async") # free `webserver_async` if it was loaded as part of this file
+ end
+
+ #################################################################################
+ # stop
+ #
+ # Stop server
+ #################################################################################
+ def close()
+ tasmota.remove_driver(self)
+ if self.web
+ self.web.close()
+ end
+ end
+
+ def update()
+ self.p_leds = self.strip.pixels_buffer(self.p_leds) # update buffer
+ self.h = tasmota.settings.light_pixels_height_1 + 1
+ self.w = self.strip.pixel_count() / (tasmota.settings.light_pixels_height_1 + 1)
+ self.cell_size = tasmota.int(self.HTML_WIDTH / self.w, 4, 25)
+ self.cell_space = (self.cell_size <= 6) ? 1 : 2
+ end
+
+ def send_info_page(cnx, uri, verb)
+ import string
+
+ self.update()
+ var host = cnx.header_host
+ var host_split = string.split(host, ':') # need to make it stronger
+ var ip = host_split[0]
+ var port = 80
+ if size(host_split) > 1
+ port = int(host_split[1])
+ end
+
+ cnx.send(200, "text/html")
+ cnx.write(self.HTML_HEAD1)
+ cnx.write(format(self.HTML_URL_F, ip, port))
+ cnx.write(self.HTML_HEAD2)
+ cnx.write(self.HTML_CONTENT)
+ cnx.write(self.HTML_END)
+
+ cnx.content_stop()
+ end
+
+ static class feeder
+ var app # overarching app (debug_panel)
+ var cnx # connection object
+
+ def init(app, cnx)
+ self.app = app
+ self.cnx = cnx
+ tasmota.add_driver(self)
+ end
+
+ def close()
+ tasmota.remove_driver(self)
+ end
+
+ def every_100ms()
+ self.send_feed()
+ end
+
+ def send_feed()
+ var cnx = self.cnx
+ if !cnx.connected()
+ self.close()
+ return
+ end
+
+ var server = self.cnx.server
+ if cnx.buf_out_empty()
+ # if out buffer is not empty, do not send any new information
+ var app = self.app
+ app.update()
+ var payload1 = app.p1
+ var p_leds = app.p_leds
+
+ payload1.clear()
+ payload1 .. "id:"
+ server.bytes_append_int(payload1, tasmota.millis())
+ payload1 .. "\r\nevent:leds\r\ndata:"
+
+ payload1 .. '{"w":'
+ server.bytes_append_int(payload1, app.w)
+ payload1 .. ',"h":'
+ server.bytes_append_int(payload1, app.h)
+ payload1 .. ',"clsz":'
+ server.bytes_append_int(payload1, app.cell_size)
+ payload1 .. ',"clsp":'
+ server.bytes_append_int(payload1, app.cell_space)
+ payload1 .. ',"rev":'
+ server.bytes_append_int(payload1, tasmota.settings.light_pixels_reverse)
+ payload1 .. ',"alt":'
+ server.bytes_append_int(payload1, tasmota.settings.light_pixels_alternate)
+ payload1 .. ',"hex":"'
+ payload1.appendhex(p_leds)
+ payload1 .. '"}\r\n\r\n'
+ cnx.write(payload1)
+ end
+ end
+
+ end
+
+ def send_info_feed(cnx, uri, verb)
+ cnx.set_chunked(false) # no chunking since we use EventSource
+ cnx.send(200, "text/event-stream")
+ #
+ var feed = feeder(self, cnx)
+ feed.send_feed() # send first values immediately
+ end
+
+ def web_add_main_button()
+ self.send_iframe_code()
+ end
+
+ def send_iframe_code()
+ import webserver
+ self.update()
+ var ip = tasmota.wifi().find('ip')
+ if (ip == nil)
+ ip = tasmota.eth().find('ip')
+ end
+ if (ip != nil)
+ var height = self.h * self.cell_size + 10
+ webserver.content_send(
+ f'
'
+ ''
+ )
+ webserver.content_send(
+ ''
+ )
+ end
+ end
+
+end
+
+return leds_panel()
diff --git a/tasmota/berry/extensions/Leds_Panel/manifest.json b/tasmota/berry/extensions/Leds_Panel/manifest.json
new file mode 100644
index 000000000..492701cd3
--- /dev/null
+++ b/tasmota/berry/extensions/Leds_Panel/manifest.json
@@ -0,0 +1,8 @@
+{
+ "name": "Leds Panel",
+ "version": "0x19090100",
+ "description": "Realtime display of the WS2812 leds in browser",
+ "author": "Stephan Hadinger",
+ "min_tasmota": "0x0F000100",
+ "features": ""
+}
\ No newline at end of file
diff --git a/tasmota/berry/extensions/Partition_Wizard.tapp b/tasmota/berry/extensions/Partition_Wizard.tapp
new file mode 100644
index 000000000..8c5e88d4b
Binary files /dev/null and b/tasmota/berry/extensions/Partition_Wizard.tapp differ
diff --git a/tasmota/berry/extensions/Partition_Wizard/autoexec.be b/tasmota/berry/extensions/Partition_Wizard/autoexec.be
new file mode 100644
index 000000000..630cfda87
--- /dev/null
+++ b/tasmota/berry/extensions/Partition_Wizard/autoexec.be
@@ -0,0 +1,9 @@
+# rm Partition_Wizard.tapp; zip -j -0 Partition_Wizard.tapp Partition_Wizard/autoexec.be Partition_Wizard/partition_wizard.bec Partition_Wizard/manifest.json
+do # embed in `do` so we don't add anything to global namespace
+ import introspect
+ var partition_wizard = introspect.module('partition_wizard', true) # load module but don't cache
+ tasmota.add_extension(partition_wizard)
+end
+
+# to remove:
+# tasmota.unload_extension('Partition Wizard')
diff --git a/tasmota/berry/extensions/Partition_Wizard/manifest.json b/tasmota/berry/extensions/Partition_Wizard/manifest.json
new file mode 100644
index 000000000..d03487b55
--- /dev/null
+++ b/tasmota/berry/extensions/Partition_Wizard/manifest.json
@@ -0,0 +1,8 @@
+{
+ "name": "Partition Wizard",
+ "version": "0x19090100",
+ "description": "Wizard for resizing partitions and converting to safeboot layout",
+ "author": "Stephan Hadinger",
+ "min_tasmota": "0x0F000100",
+ "features": ""
+}
\ No newline at end of file
diff --git a/tasmota/berry/modules/Partition_Wizard/partition_wizard.be b/tasmota/berry/extensions/Partition_Wizard/partition_wizard.be
similarity index 97%
rename from tasmota/berry/modules/Partition_Wizard/partition_wizard.be
rename to tasmota/berry/extensions/Partition_Wizard/partition_wizard.be
index 46059986c..b9d79843d 100644
--- a/tasmota/berry/modules/Partition_Wizard/partition_wizard.be
+++ b/tasmota/berry/extensions/Partition_Wizard/partition_wizard.be
@@ -7,8 +7,6 @@
# rm Partition_Wizard.tapp; zip Partition_Wizard.tapp -j -0 Partition_Wizard/autoexec.be Partition_Wizard/partition_wizard.be
#######################################################################
-var partition_wizard = module('partition_wizard')
-
#################################################################################
# Partition_wizard_UI
#
@@ -22,6 +20,11 @@ class Partition_wizard_UI
def init()
import persist
+ tasmota.add_driver(self)
+ if tasmota.is_network_up()
+ self.web_add_handler() # if init is called after the network is up, `web_add_handler` event is not fired
+ end
+
if persist.find("factory_migrate") == true
# remove marker to avoid bootloop if something goes wrong
tasmota.log("UPL: Resuming after step 1", 2)
@@ -30,18 +33,25 @@ class Partition_wizard_UI
# continue the migration process 5 seconds after Wifi is connected
def continue_after_5s()
- tasmota.remove_rule("parwiz_5s1") # first remove rule to avoid firing it again at Wifi reconnect
- tasmota.remove_rule("parwiz_5s2") # first remove rule to avoid firing it again at Wifi reconnect
- tasmota.set_timer(5000, /-> self.do_safeboot_partitioning()) # delay by 5 s
+ tasmota.set_timer(5000, /-> self.do_safeboot_partitioning(), "partition_wizard_timer") # delay by 5 s
end
- tasmota.add_rule("Wifi#Connected=1", continue_after_5s, "parwiz_5s1")
- tasmota.add_rule("Wifi#Connected==1", continue_after_5s, "parwiz_5s2")
-
+ tasmota.when_network_up(continue_after_5s)
end
end
+ #- ---------------------------------------------------------------------- -#
+ # unload
+ #- ---------------------------------------------------------------------- -#
+ def unload()
+ import webserver
+ webserver.remove_route("/part_wiz", webserver.HTTP_GET)
+ webserver.remove_route("/part_wiz", webserver.HTTP_POST)
+ tasmota.remove_driver(self)
+ tasmota.remove_timer("partition_wizard_timer")
+ end
+
# ----------------------------------------------------------------------
- # Patch partition core since we can't chang the solidified code
+ # Patch partition core since we can't change the solidified code
# ----------------------------------------------------------------------
def patch_partition_core(p)
var otadata = p.otadata
@@ -881,26 +891,5 @@ class Partition_wizard_UI
webserver.on("/part_wiz", / -> self.page_part_ctl(), webserver.HTTP_POST)
end
end
-partition_wizard.Partition_wizard_UI = Partition_wizard_UI
-
-#- create and register driver in Tasmota -#
-if tasmota
- import partition_core
- var partition_wizard_ui = partition_wizard.Partition_wizard_UI()
- tasmota.add_driver(partition_wizard_ui)
- ## can be removed if put in 'autoexec.bat'
- partition_wizard_ui.web_add_handler()
-end
-
-return partition_wizard
-
-#- Example
-
-import partition
-
-# read
-p = partition.Partition()
-print(p)
-
--#
+return Partition_wizard_UI()
diff --git a/tasmota/berry/extensions/Partition_Wizard/partition_wizard.bec b/tasmota/berry/extensions/Partition_Wizard/partition_wizard.bec
new file mode 100644
index 000000000..7aba7c780
Binary files /dev/null and b/tasmota/berry/extensions/Partition_Wizard/partition_wizard.bec differ
diff --git a/tasmota/berry/extensions/Wifi_Memory_Sticker.tapp b/tasmota/berry/extensions/Wifi_Memory_Sticker.tapp
new file mode 100644
index 000000000..aaa5ba624
Binary files /dev/null and b/tasmota/berry/extensions/Wifi_Memory_Sticker.tapp differ
diff --git a/tasmota/berry/extensions/Wifi_Memory_Sticker/autoexec.be b/tasmota/berry/extensions/Wifi_Memory_Sticker/autoexec.be
new file mode 100644
index 000000000..e10b4ded4
--- /dev/null
+++ b/tasmota/berry/extensions/Wifi_Memory_Sticker/autoexec.be
@@ -0,0 +1,6 @@
+# rm Wifi_Memory_Sticker.tapp; zip -j -0 Wifi_Memory_Sticker.tapp Wifi_Memory_Sticker/autoexec.be Wifi_Memory_Sticker/wifi_memory_sticker.be Wifi_Memory_Sticker/manifest.json
+do # embed in `do` so we don't add anything to global namespace
+ import introspect
+ var wifi_memory_sticker = introspect.module('wifi_memory_sticker', true) # load module but don't cache
+ tasmota.add_extension(wifi_memory_sticker)
+end
diff --git a/tasmota/berry/extensions/Wifi_Memory_Sticker/manifest.json b/tasmota/berry/extensions/Wifi_Memory_Sticker/manifest.json
new file mode 100644
index 000000000..1837c8201
--- /dev/null
+++ b/tasmota/berry/extensions/Wifi_Memory_Sticker/manifest.json
@@ -0,0 +1,8 @@
+{
+ "name": "Wifi Memory Sticker",
+ "version": "0x19090100",
+ "description": "Display top left sticker with Wifi strength and memory heap",
+ "author": "Stephan Hadinger",
+ "min_tasmota": "0x0F000100",
+ "features": ""
+}
\ No newline at end of file
diff --git a/tasmota/berry/extensions/Wifi_Memory_Sticker/wifi_memory_sticker.be b/tasmota/berry/extensions/Wifi_Memory_Sticker/wifi_memory_sticker.be
new file mode 100644
index 000000000..ced641b68
--- /dev/null
+++ b/tasmota/berry/extensions/Wifi_Memory_Sticker/wifi_memory_sticker.be
@@ -0,0 +1,50 @@
+#######################################################################
+# Wifi Memory Sticker
+#
+# Sticker to show realtime wifi strengh and memory (top left of main page)
+
+#################################################################################
+# Wifi_Memory_Sticker
+#################################################################################
+class Wifi_Memory_Sticker
+
+ static var HTTP_HEAD_STYLE_WIFI =
+ ""
+
+ def init()
+
+ tasmota.add_driver(self)
+ end
+
+ def unload()
+ tasmota.remove_driver(self)
+ end
+
+ #################################################################################
+ # called when displaying the left status line
+ def web_status_line_left()
+ import webserver
+ # display wifi
+ if tasmota.wifi('up')
+ webserver.content_send(self.HTTP_HEAD_STYLE_WIFI)
+ var rssi = tasmota.wifi('rssi')
+ webserver.content_send(format("
",
+ tasmota.wifi('quality'), rssi,
+ rssi >= -55 ? "active" : "",
+ rssi >= -70 ? "active" : "",
+ rssi >= -85 ? "active" : ""))
+ end
+ # display free heap
+ webserver.content_send(f"
{tasmota.memory('heap_free')}k ")
+ end
+end
+
+return Wifi_Memory_Sticker()
diff --git a/tasmota/berry/leds_panel/autoexec.be b/tasmota/berry/leds_panel/autoexec.be
new file mode 100644
index 000000000..94821fe81
--- /dev/null
+++ b/tasmota/berry/leds_panel/autoexec.be
@@ -0,0 +1,6 @@
+# Led panel web app
+do # embed in `do` so we don't add anything to global namespace
+ import introspect
+ var leds_panel = introspect.module('leds_panel', true) # load module but don't cache
+ tasmota.add_driver(leds_panel, "leds_panel")
+end
diff --git a/tasmota/berry/leds_panel/leds_panel.be b/tasmota/berry/leds_panel/leds_panel.be
index 45e4f29c3..d7fb031c1 100644
--- a/tasmota/berry/leds_panel/leds_panel.be
+++ b/tasmota/berry/leds_panel/leds_panel.be
@@ -705,6 +705,7 @@ class leds_panel
var strip # strip object
var h, w, cell_size, cell_space
+ static var EXT_NAME = "leds_panel"
static var SAMPLING = 100
static var PORT = 8886 # default port 8886
static var HTML_WIDTH = 290
@@ -826,9 +827,25 @@ class leds_panel
self.web.on("/leds_feed", self, self.send_info_feed) # feed with leds values
self.web.on("/leds", self, self.send_info_page) # display leds page
- tasmota.add_driver(self)
+ tasmota.add_driver(self, self.EXT_NAME) # also register as `leds_panel` extension
end
+ #################################################################################
+ # unload
+ #
+ # Uninstall the extension and deallocate all resources
+ #################################################################################
+ def unload()
+ self.close() # stop server
+ tasmota.remove_driver(self) # remove driver, normally already done by tasmota.unload_ext
+ global.undef("webserver_async") # free `webserver_async` if it was loaded as part of this file
+ end
+
+ #################################################################################
+ # stop
+ #
+ # Stop server
+ #################################################################################
def close()
tasmota.remove_driver(self)
self.web.close()
diff --git a/tasmota/berry/modules/Partition_Wizard.tapp b/tasmota/berry/modules/Partition_Wizard.tapp
index 0628cb2c1..43bfb817b 100644
Binary files a/tasmota/berry/modules/Partition_Wizard.tapp and b/tasmota/berry/modules/Partition_Wizard.tapp differ
diff --git a/tasmota/berry/modules/Partition_Wizard/partition_wizard.bec b/tasmota/berry/modules/Partition_Wizard/partition_wizard.bec
index f56631040..7aba7c780 100644
Binary files a/tasmota/berry/modules/Partition_Wizard/partition_wizard.bec and b/tasmota/berry/modules/Partition_Wizard/partition_wizard.bec differ
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index f5ab109b2..87cbf296b 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -1220,7 +1220,8 @@
//#define USE_IBEACON_ESP32 // Add support for Bluetooth LE passive scan of iBeacon devices using the internal ESP32 Bluetooth module
//#define USE_WEBCAM // Add support for webcam
-#define USE_AUTOCONF // Enable Esp32 autoconf feature, requires USE_BERRY and USE_WEBCLIENT_HTTPS (12KB Flash)
+#define USE_AUTOCONF // Enable Esp32(x) autoconf feature, requires USE_BERRY and USE_WEBCLIENT_HTTPS (12KB Flash)
+// #define USE_EXTENSION_MANAGER // Enable Esp32(x) extensions manager, requires USE_BERRY and USE_WEBCLIENT_HTTPS (9KB Flash)
#define USE_BERRY // Enable Berry scripting language
#define USE_BERRY_PYTHON_COMPAT // Enable by default `import python_compat`
#define USE_BERRY_TIMEOUT 4000 // Timeout in ms, will raise an exception if running time exceeds this timeout
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino b/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino
index ef5c8cc97..c7f9c38ed 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino
@@ -58,6 +58,10 @@ const char be_berry_init_code[] =
"do import autoconf end "
#endif // USE_AUTOCONF
+#ifdef USE_EXTENSION_MANAGER
+ "do import extension_manager end "
+#endif
+
#ifdef USE_LVGL
"import lv "
"import lv_tasmota "