Merge branch 'development' into prerelease-12.5

This commit is contained in:
Theo Arends 2023-04-16 12:22:20 +02:00
commit ea592b918f
24 changed files with 2622 additions and 3178 deletions

View File

@ -272,5 +272,6 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up
| USE_SHELLY_PRO | | / x | | | | |
| USE_DALI | | / - | | | | |
| USE_DINGTIAN_RELAY | | / - | | | | |
| USE_MATTER_DEVICE | | / - | | | | | See SetOption151
* USE_MQTT_TLS is enabled by default in every ESP32 variants

View File

@ -12,6 +12,8 @@ All notable changes to this project will be documented in this file.
- ESP32 WIP support for 16 shutters using `#define USE_SHUTTER_ESP32` in addition to `USE_SHUTTER` by Stefan Bode (#18295)
- Berry `webserver.html_escape()` reusing the internal HTML escaping function
- Support for GDK101 gamma radiation sensor by Petr Novacek (#18390)
- Matter support in now stabilized for Apple and Google (not tested with Alexa)
- Berry `instrospect.name()` to get names of functions, modules and classes (#18422)
### Changed
- ESP32 LVGL library from v8.3.5 to v8.3.6 (no functional change)

View File

@ -19,7 +19,7 @@ See [CHANGELOG.md](https://github.com/arendst/Tasmota/blob/development/tasmota/C
## Development
[![Dev Version](https://img.shields.io/badge/development%20version-v12.3.x.x-blue.svg)](https://github.com/arendst/Tasmota)
[![Dev Version](https://img.shields.io/badge/development%20version-v12.5.x.x-blue.svg)](https://github.com/arendst/Tasmota)
[![Download Dev](https://img.shields.io/badge/download-development-yellow.svg)](http://ota.tasmota.com/tasmota/)
[![Tasmota CI](https://github.com/arendst/Tasmota/workflows/Tasmota%20CI/badge.svg)](https://github.com/arendst/Tasmota/actions?query=workflow%3A%22Tasmota+CI%22)
[![Tasmota ESP32 CI](https://github.com/arendst/Tasmota/workflows/Tasmota%20ESP32%20CI/badge.svg)](https://github.com/arendst/Tasmota/actions?query=workflow%3A%22Tasmota+ESP32+CI%22)

View File

@ -7,7 +7,7 @@ Using command ``I2cDriver`` individual drivers can be enabled or disabled at run
The following table lists the supported I2C devices
Index | Define | Driver | Device | Address(es) | Description
------|---------------------|---------|----------|-------------|-----------------------------------------------
------|---------------------|----------|----------|-------------|-----------------------------------------------
1 | USE_PCA9685 | xdrv_15 | PCA9685 | 0x40 - 0x47 | 16-channel 12-bit pwm driver
2 | USE_PCF8574 | xdrv_28 | PCF8574 | 0x20 - 0x26 | 8-bit I/O expander (address range overridable)
2 | USE_PCF8574 | xdrv_28 | PCF8574A | 0x39 - 0x3F | 8-bit I/O expander (address range overridable)

View File

@ -126,6 +126,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- ESP32 WIP support for 16 shutters using `#define USE_SHUTTER_ESP32` in addition to `USE_SHUTTER` by Stefan Bode [#18295](https://github.com/arendst/Tasmota/issues/18295)
- Berry support for Tensorflow Lite (TFL) by Christiaan Baars [#18119](https://github.com/arendst/Tasmota/issues/18119)
- Berry `webclient` features
- Berry `instrospect.name()` to get names of functions, modules and classes [#18422](https://github.com/arendst/Tasmota/issues/18422)
- Matter support for Light and Relays by Stephan Hadinger [#18320](https://github.com/arendst/Tasmota/issues/18320)
### Breaking Changed

View File

@ -188,6 +188,31 @@ static int m_ismethod(bvm *vm)
be_return_nil(vm);
}
static int m_name(bvm *vm)
{
int top = be_top(vm);
if (top >= 1) {
bvalue *v = be_indexof(vm, 1);
const char* name = NULL;
switch (var_type(v)) {
case BE_CLOSURE:
name = str(((bclosure*) var_toobj(v))->proto->name);
break;
case BE_CLASS:
name = str(((bclass*) var_toobj(v))->name);
break;
case BE_MODULE:
name = be_module_name(var_toobj(v));
break;
}
if (name) {
be_pushstring(vm, name);
be_return(vm);
}
}
be_return_nil(vm);
}
#if !BE_USE_PRECOMPILED_OBJECT
be_native_module_attr_table(introspect) {
be_native_module_function("members", m_attrlist),
@ -201,6 +226,8 @@ be_native_module_attr_table(introspect) {
be_native_module_function("toptr", m_toptr),
be_native_module_function("fromptr", m_fromptr),
be_native_module_function("name", m_name),
be_native_module_function("ismethod", m_ismethod),
};
@ -219,6 +246,8 @@ module introspect (scope: global, depend: BE_USE_INTROSPECT_MODULE) {
toptr, func(m_toptr)
fromptr, func(m_fromptr)
name, func(m_name)
ismethod, func(m_ismethod)
}
@const_object_info_end */

View File

@ -144,9 +144,9 @@ class Matter_Commisioning_Context
pbkdfparamresp.responderSessionId = session.__future_local_session_id
pbkdfparamresp.pbkdf_parameters_salt = self.device.commissioning_salt
pbkdfparamresp.pbkdf_parameters_iterations = self.device.commissioning_iterations
tasmota.log("MTR: pbkdfparamresp: " + str(matter.inspect(pbkdfparamresp)), 4)
# tasmota.log("MTR: pbkdfparamresp: " + str(matter.inspect(pbkdfparamresp)), 4)
var pbkdfparamresp_raw = pbkdfparamresp.tlv2raw()
tasmota.log("MTR: pbkdfparamresp_raw: " + pbkdfparamresp_raw.tohex(), 4)
# tasmota.log("MTR: pbkdfparamresp_raw: " + pbkdfparamresp_raw.tohex(), 4)
session.__Msg2 = pbkdfparamresp_raw
@ -595,8 +595,7 @@ class Matter_Commisioning_Context
var initiatorNOCPubKey = initiatorNOCTLV.findsubval(9)
var initiatorNOCListDN = initiatorNOCTLV.findsub(6)
var initiatorFabricId = initiatorNOCListDN.findsubval(17)
if type(initiatorFabricId) == 'int' initiatorFabricId = int64(initiatorFabricId) end
session.peer_node_id = initiatorFabricId.tobytes()
if type(initiatorFabricId) == 'int' session.peer_node_id = int64.fromu32(initiatorFabricId).tobytes() else session.peer_node_id = initiatorFabricId.tobytes() end
tasmota.log("MTR: initiatorFabricId="+str(session.peer_node_id), 3)
var sigma3_tbs = matter.TLV.Matter_TLV_struct()
@ -617,13 +616,14 @@ class Matter_Commisioning_Context
if !sigma3_tbs_valid
tasmota.log("MTR: sigma3_tbs does not have a valid signature", 2)
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
return false
end
tasmota.log("MTR: ******************* Invalid signature, trying anyways", 2)
# tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
# var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
# return false
else
# All good, compute new keys
tasmota.log("MTR: Sigma3 verified, computing new keys", 3)
end
TranscriptHash = crypto.SHA256().update(session.__Msg1).update(session.__Msg2).update(sigma3.Msg3).out()
tasmota.log("MTR: * __Msg1 = " + session.__Msg1.tohex(), 4)

View File

@ -98,7 +98,7 @@ class Matter_Pake1
def parse(b, idx)
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
tasmota.log("MTR: parsed TLV: " + str(val), 4)
# tasmota.log("MTR: parsed TLV: " + str(val), 4)
self.pA = val.getsubval(1)
return self
@ -130,7 +130,7 @@ class Matter_Pake3
def parse(b, idx)
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
tasmota.log("MTR: parsed TLV: " + str(val), 4)
# tasmota.log("MTR: parsed TLV: " + str(val), 4)
self.cA = val.getsubval(1)
return self
@ -157,7 +157,7 @@ class Matter_Sigma1
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
self.Msg1 = b[idx..]
tasmota.log("MTR: Sigma1 TLV=" + str(val), 4)
# tasmota.log("MTR: Sigma1 TLV=" + str(val), 4)
self.initiatorRandom = val.getsubval(1)
self.initiator_session_id = val.getsubval(2)
@ -240,7 +240,7 @@ class Matter_Sigma3
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
self.Msg3 = b[idx..]
tasmota.log("MTR: Sigma3 TLV=" + str(val), 4)
# tasmota.log("MTR: Sigma3 TLV=" + str(val), 4)
self.TBEData3Encrypted = val.getsubval(1)
return self

View File

@ -497,13 +497,13 @@ class Matter_Device
var direct = (ctx.endpoint != nil) && (ctx.cluster != nil) && (ctx.attribute != nil) # true if the target is a precise attribute, false if it results from an expansion and error are ignored
tasmota.log(string.format("MTR: process_attribute_expansion %s", str(ctx)), 4)
# tasmota.log(string.format("MTR: process_attribute_expansion %s", str(ctx)), 4)
# build the list of candidates
# list of all endpoints
var all = {} # map of {endpoint: {cluster: {attributes:[pi]}}
tasmota.log(string.format("MTR: endpoint=%s cluster=%s attribute=%s", endpoint, cluster, attribute), 4)
# tasmota.log(string.format("MTR: endpoint=%s cluster=%s attribute=%s", endpoint, cluster, attribute), 4)
for pi: self.plugins
var ep = pi.get_endpoint() # get supported endpoints for this plugin
@ -514,7 +514,7 @@ class Matter_Device
# now explore the cluster list for 'ep'
var cluster_list = pi.get_cluster_list(ep) # cluster_list is the actual list of candidate cluster for this pluging and endpoint
tasmota.log(string.format("MTR: pi=%s ep=%s cl_list=%s", str(pi), str(ep), str(cluster_list)), 4)
# tasmota.log(string.format("MTR: pi=%s ep=%s cl_list=%s", str(pi), str(ep), str(cluster_list)), 4)
for cl: cluster_list
if cluster != nil && cl != cluster continue end # skip if specific cluster and no match
# from now on, 'cl' is a good candidate
@ -523,7 +523,7 @@ class Matter_Device
# now filter on attributes
var attr_list = pi.get_attribute_list(ep, cl)
tasmota.log(string.format("MTR: pi=%s ep=%s cl=%s at_list=%s", str(pi), str(ep), str(cl), str(attr_list)), 4)
# tasmota.log(string.format("MTR: pi=%s ep=%s cl=%s at_list=%s", str(pi), str(ep), str(cl), str(attr_list)), 4)
for at: attr_list
if attribute != nil && at != attribute continue end # skip if specific attribute and no match
# from now on, 'at' is a good candidate

View File

@ -38,7 +38,7 @@ class Matter_IM
def process_incoming(msg)
# messages are always TLV, decode payload
tasmota.log("MTR: received IM message " + matter.inspect(msg), 3)
# tasmota.log("MTR: received IM message " + matter.inspect(msg), 3)
var val = matter.TLV.parse(msg.raw, msg.app_payload_idx)
@ -218,7 +218,6 @@ class Matter_IM
import string
var attr_name = matter.get_attribute_name(ctx.cluster, ctx.attribute)
attr_name = attr_name ? " (" + attr_name + ")" : ""
# tasmota.log(string.format("MTR: Read Attribute " + str(ctx) + (attr_name ? " (" + attr_name + ")" : ""), 2)
# Special case to report unsupported item, if pi==nil
var res = (pi != nil) ? pi.read_attribute(session, ctx) : nil
if res != nil
@ -325,7 +324,7 @@ class Matter_IM
self.subs_shop.remove_by_session(msg.session) # if `keep_subscriptions`, kill all subscriptions from current session
end
tasmota.log("MTR: received SubscribeRequestMessage=" + str(query), 3)
# tasmota.log("MTR: received SubscribeRequestMessage=" + str(query), 3)
var sub = self.subs_shop.new_subscription(msg.session, query)
@ -357,7 +356,7 @@ class Matter_IM
def process_invoke_request(msg, val)
import string
# structure is `ReadRequestMessage` 10.6.2 p.558
tasmota.log("MTR: IM:invoke_request processing start", 4)
# tasmota.log("MTR: IM:invoke_request processing start", 4)
var ctx = matter.Path()
var query = matter.InvokeRequestMessage().from_TLV(val)
@ -416,10 +415,10 @@ class Matter_IM
end
end
tasmota.log("MTR: invoke_responses="+str(ret.invoke_responses), 4)
# tasmota.log("MTR: invoke_responses="+str(ret.invoke_responses), 4)
if size(ret.invoke_responses) > 0
tasmota.log("MTR: InvokeResponse=" + str(ret), 4)
tasmota.log("MTR: InvokeResponseTLV=" + str(ret.to_TLV()), 3)
# tasmota.log("MTR: InvokeResponse=" + str(ret), 4)
# tasmota.log("MTR: InvokeResponseTLV=" + str(ret.to_TLV()), 3)
self.send_invoke_response(msg, ret)
else
@ -455,7 +454,7 @@ class Matter_IM
def process_write_request(msg, val)
import string
var query = matter.WriteRequestMessage().from_TLV(val)
tasmota.log("MTR: received WriteRequestMessage=" + str(query), 3)
# tasmota.log("MTR: received WriteRequestMessage=" + str(query), 3)
var suppress_response = query.suppress_response
# var timed_request = query.timed_request # TODO not supported
@ -502,7 +501,7 @@ class Matter_IM
end
# structure is `ReadRequestMessage` 10.6.2 p.558
tasmota.log("MTR: IM:write_request processing start", 4)
# tasmota.log("MTR: IM:write_request processing start", 4)
var ctx = matter.Path()
if query.write_requests != nil
@ -541,8 +540,8 @@ class Matter_IM
)
end
tasmota.log("MTR: ReportWriteMessage=" + str(ret), 4)
tasmota.log("MTR: ReportWriteMessageTLV=" + str(ret.to_TLV()), 3)
# tasmota.log("MTR: ReportWriteMessage=" + str(ret), 4)
# tasmota.log("MTR: ReportWriteMessageTLV=" + str(ret.to_TLV()), 3)
# send the reponse that may need to be chunked if too large to fit in a single UDP message
if !suppress_response
@ -578,7 +577,7 @@ class Matter_IM
def process_timed_request(msg, val)
import string
var query = matter.TimedRequestMessage().from_TLV(val)
tasmota.log("MTR: received TimedRequestMessage=" + str(query), 3)
# tasmota.log("MTR: received TimedRequestMessage=" + str(query), 3)
tasmota.log(string.format("MTR: >Command (%6i) TimedRequest=%i", msg.session.local_session_id, query.timeout), 2)

View File

@ -58,7 +58,7 @@ class Matter_IM_Message
# ack received for previous message, proceed to next (if any)
# return true if we manage the ack ourselves, false if it needs to be done upper
def ack_received(msg)
tasmota.log("MTR: IM_Message ack_received exch="+str(self.resp.exchange_id), 3)
# tasmota.log("MTR: IM_Message ack_received exch="+str(self.resp.exchange_id), 3)
self.expiration = tasmota.millis() + self.MSG_TIMEOUT # give more time
return false
end
@ -67,7 +67,7 @@ class Matter_IM_Message
# return true if we manage the ack ourselves, false if it needs to be done upper
def status_ok_received(msg)
import string
tasmota.log(string.format("MTR: IM_Message status_ok_received exch=%i", self.resp.exchange_id), 3)
# tasmota.log(string.format("MTR: IM_Message status_ok_received exch=%i", self.resp.exchange_id), 3)
self.expiration = tasmota.millis() + self.MSG_TIMEOUT # give more time
if msg
self.resp = msg.build_response(self.resp.opcode, self.resp.x_flag_r, self.resp) # update packet
@ -88,7 +88,7 @@ class Matter_IM_Message
# default responder for data
def send_im(responder)
import string
tasmota.log(string.format("MTR: IM_Message send_im exch=%i ready=%i", self.resp.exchange_id, self.ready ? 1 : 0), 3)
# tasmota.log(string.format("MTR: IM_Message send_im exch=%i ready=%i", self.resp.exchange_id, self.ready ? 1 : 0), 3)
if !self.ready return false end
var resp = self.resp
resp.encode_frame(self.data.to_TLV().tlv2raw()) # payload in cleartext
@ -165,7 +165,7 @@ class Matter_IM_ReportData : Matter_IM_Message
# default responder for data
def send_im(responder)
import string
tasmota.log(string.format("MTR: IM_ReportData send_im exch=%i ready=%i", self.resp.exchange_id, self.ready ? 1 : 0), 3)
# tasmota.log(string.format("MTR: IM_ReportData send_im exch=%i ready=%i", self.resp.exchange_id, self.ready ? 1 : 0), 3)
if !self.ready return false end
var resp = self.resp # response frame object
var data = self.data # TLV data of the response (if any)
@ -189,7 +189,7 @@ class Matter_IM_ReportData : Matter_IM_Message
end
end
tasmota.log(string.format("MTR: exch=%i elements=%i msg_sz=%i total=%i", self.get_exchangeid(), elements, msg_sz, sz_attribute_reports), 3)
# tasmota.log(string.format("MTR: exch=%i elements=%i msg_sz=%i total=%i", self.get_exchangeid(), elements, msg_sz, sz_attribute_reports), 3)
var next_elemnts = []
if data.attribute_reports != nil
next_elemnts = data.attribute_reports[elements .. ]
@ -261,8 +261,8 @@ class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
# ack received, confirm the heartbeat
def ack_received(msg)
import string
tasmota.log(string.format("MTR: IM_ReportDataSubscribed ack_received sub=%i", self.sub.subscription_id), 3)
# import string
# tasmota.log(string.format("MTR: IM_ReportDataSubscribed ack_received sub=%i", self.sub.subscription_id), 3)
super(self).ack_received(msg)
if !self.report_data_phase
# if ack is received while all data is sent, means that it finished without error
@ -277,16 +277,16 @@ class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
# we received an ACK error, remove subscription
def status_error_received(msg)
import string
tasmota.log(string.format("MTR: IM_ReportDataSubscribed status_error_received sub=%i exch=%i", self.sub.subscription_id, self.resp.exchange_id), 3)
# import string
# tasmota.log(string.format("MTR: IM_ReportDataSubscribed status_error_received sub=%i exch=%i", self.sub.subscription_id, self.resp.exchange_id), 3)
self.sub.remove_self()
end
# ack received for previous message, proceed to next (if any)
# return true if we manage the ack ourselves, false if it needs to be done upper
def status_ok_received(msg)
import string
tasmota.log(string.format("MTR: IM_ReportDataSubscribed status_ok_received sub=%i exch=%i", self.sub.subscription_id, self.resp.exchange_id), 3)
# import string
# tasmota.log(string.format("MTR: IM_ReportDataSubscribed status_ok_received sub=%i exch=%i", self.sub.subscription_id, self.resp.exchange_id), 3)
if self.report_data_phase
return super(self).status_ok_received(msg)
else
@ -300,13 +300,13 @@ class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
# default responder for data
def send_im(responder)
import string
tasmota.log(string.format("MTR: IM_ReportDataSubscribed send sub=%i exch=%i ready=%i", self.sub.subscription_id, self.resp.exchange_id, self.ready ? 1 : 0), 3)
tasmota.log(string.format("MTR: ReportDataSubscribed::send_im size(self.data.attribute_reports)=%i ready=%s report_data_phase=%s", size(self.data.attribute_reports), str(self.ready), str(self.report_data_phase)), 3)
# tasmota.log(string.format("MTR: IM_ReportDataSubscribed send sub=%i exch=%i ready=%i", self.sub.subscription_id, self.resp.exchange_id, self.ready ? 1 : 0), 3)
# tasmota.log(string.format("MTR: ReportDataSubscribed::send_im size(self.data.attribute_reports)=%i ready=%s report_data_phase=%s", size(self.data.attribute_reports), str(self.ready), str(self.report_data_phase)), 3)
if !self.ready return false end
if size(self.data.attribute_reports) > 0 # do we have still attributes to send
if self.report_data_phase
super(self).send_im(responder)
tasmota.log(string.format("MTR: ReportDataSubscribed::send_im called super finish=%i", self.finish), 3)
# tasmota.log(string.format("MTR: ReportDataSubscribed::send_im called super finish=%i", self.finish), 3)
if !self.finish return end # ReportData needs to continue
# ReportData is finished
self.report_data_phase = false
@ -361,8 +361,8 @@ class Matter_IM_SubscribedHeartbeat : Matter_IM_ReportData
# ack received, confirm the heartbeat
def ack_received(msg)
import string
tasmota.log(string.format("MTR: Matter_IM_SubscribedHeartbeat ack_received sub=%i", self.sub.subscription_id), 3)
# import string
# tasmota.log(string.format("MTR: Matter_IM_SubscribedHeartbeat ack_received sub=%i", self.sub.subscription_id), 3)
super(self).ack_received(msg)
self.finish = true
return true # proceed to calling send() which removes the message
@ -370,8 +370,8 @@ class Matter_IM_SubscribedHeartbeat : Matter_IM_ReportData
# we received an ACK error, remove subscription
def status_error_received(msg)
import string
tasmota.log(string.format("MTR: Matter_IM_SubscribedHeartbeat status_error_received sub=%i exch=%i", self.sub.subscription_id, self.resp.exchange_id), 3)
# import string
# tasmota.log(string.format("MTR: Matter_IM_SubscribedHeartbeat status_error_received sub=%i exch=%i", self.sub.subscription_id, self.resp.exchange_id), 3)
self.sub.remove_self()
return false # let the caller to the ack
end
@ -379,15 +379,15 @@ class Matter_IM_SubscribedHeartbeat : Matter_IM_ReportData
# ack received for previous message, proceed to next (if any)
# return true if we manage the ack ourselves, false if it needs to be done upper
def status_ok_received(msg)
import string
tasmota.log(string.format("MTR: Matter_IM_SubscribedHeartbeat status_ok_received sub=%i exch=%i", self.sub.subscription_id, self.resp.exchange_id), 3)
# import string
# tasmota.log(string.format("MTR: Matter_IM_SubscribedHeartbeat status_ok_received sub=%i exch=%i", self.sub.subscription_id, self.resp.exchange_id), 3)
return false # let the caller to the ack
end
# default responder for data
def send_im(responder)
import string
tasmota.log(string.format("MTR: Matter_IM_SubscribedHeartbeat send sub=%i exch=%i ready=%i", self.sub.subscription_id, self.resp.exchange_id, self.ready ? 1 : 0), 3)
# import string
# tasmota.log(string.format("MTR: Matter_IM_SubscribedHeartbeat send sub=%i exch=%i ready=%i", self.sub.subscription_id, self.resp.exchange_id, self.ready ? 1 : 0), 3)
if !self.ready return false end
super(self).send_im(responder)
@ -413,8 +413,8 @@ class Matter_IM_SubscribeResponse : Matter_IM_ReportData
# default responder for data
def send_im(responder)
import string
tasmota.log(string.format("MTR: Matter_IM_SubscribeResponse send sub=%i ready=%i", self.sub.subscription_id, self.ready ? 1 : 0), 3)
# import string
# tasmota.log(string.format("MTR: Matter_IM_SubscribeResponse send sub=%i ready=%i", self.sub.subscription_id, self.ready ? 1 : 0), 3)
if !self.ready return false end
if self.report_data_phase
super(self).send_im(responder)
@ -437,7 +437,7 @@ class Matter_IM_SubscribeResponse : Matter_IM_ReportData
resp.encrypt()
responder.send_response_frame(resp)
self.last_counter = resp.message_counter
tasmota.log(string.format("MTR: Send SubscribeResponseMessage sub=%i id=%i", self.sub.subscription_id, resp.message_counter), 3)
# tasmota.log(string.format("MTR: Send SubscribeResponseMessage sub=%i id=%i", self.sub.subscription_id, resp.message_counter), 3)
self.sub.re_arm()
self.finish = true # remove exchange
end
@ -445,10 +445,10 @@ class Matter_IM_SubscribeResponse : Matter_IM_ReportData
# Status ok received
def status_ok_received(msg)
import string
tasmota.log(string.format("MTR: IM_SubscribeResponse status_ok_received sub=%i exch=%i ack=%i last_counter=%i", self.sub.subscription_id, self.resp.exchange_id, msg.ack_message_counter ? msg.ack_message_counter : 0 , self.last_counter), 3)
# import string
# tasmota.log(string.format("MTR: IM_SubscribeResponse status_ok_received sub=%i exch=%i ack=%i last_counter=%i", self.sub.subscription_id, self.resp.exchange_id, msg.ack_message_counter ? msg.ack_message_counter : 0 , self.last_counter), 3)
# once we receive ack, open flow for subscriptions
tasmota.log(string.format("MTR: >Sub_OK (%6i) sub=%i", msg.session.local_session_id, self.sub.subscription_id), 2)
# tasmota.log(string.format("MTR: >Sub_OK (%6i) sub=%i", msg.session.local_session_id, self.sub.subscription_id), 2)
return super(self).status_ok_received(msg)
end

View File

@ -383,22 +383,22 @@ class Matter_Frame
n.resize(13) # add zeros
end
tasmota.log("MTR: ******************************", 4)
tasmota.log("MTR: i2r =" + i2r.tohex(), 4)
tasmota.log("MTR: p =" + p.tohex(), 4)
tasmota.log("MTR: a =" + a.tohex(), 4)
tasmota.log("MTR: n =" + n.tohex(), 4)
tasmota.log("MTR: mic =" + mic.tohex(), 4)
# tasmota.log("MTR: ******************************", 4)
# tasmota.log("MTR: i2r =" + i2r.tohex(), 4)
# tasmota.log("MTR: p =" + p.tohex(), 4)
# tasmota.log("MTR: a =" + a.tohex(), 4)
# tasmota.log("MTR: n =" + n.tohex(), 4)
# tasmota.log("MTR: mic =" + mic.tohex(), 4)
# decrypt
var aes = crypto.AES_CCM(i2r, n, a, size(p), 16)
var cleartext = aes.decrypt(p)
var tag = aes.tag()
tasmota.log("MTR: ******************************", 4)
tasmota.log("MTR: cleartext =" + cleartext.tohex(), 4)
tasmota.log("MTR: tag =" + tag.tohex(), 4)
tasmota.log("MTR: ******************************", 4)
# tasmota.log("MTR: ******************************", 4)
# tasmota.log("MTR: cleartext =" + cleartext.tohex(), 4)
# tasmota.log("MTR: tag =" + tag.tohex(), 4)
# tasmota.log("MTR: ******************************", 4)
if tag != mic
tasmota.log("MTR: rejected packet due to invalid MIC", 2)
@ -461,6 +461,7 @@ class Matter_Frame
#############################################################
# Decode a message we are about to send, to ease debug
def debug(raw)
return # disable logging for now
var r = matter.Frame(self.message_handler, raw)
r.decode_header()
r.decode_payload()

View File

@ -89,15 +89,15 @@ class Matter_MessageHandler
# do we need decryption?
if frame.sec_p
# Control message
tasmota.log("MTR: CONTROL MESSAGE=" + matter.inspect(frame))
tasmota.log("MTR: CONTROL MESSAGE=" + matter.inspect(frame), 4)
var session = self.device.sessions.find_session_source_id_unsecure(frame.source_node_id, 90) # 90 seconds max
tasmota.log("MTR: find session by source_node_id = " + str(frame.source_node_id) + " session_id = " + str(session.local_session_id), 2)
tasmota.log("MTR: find session by source_node_id = " + str(frame.source_node_id) + " session_id = " + str(session.local_session_id), 4)
return self.control_message.process_incoming_control_message(frame)
elif frame.local_session_id == 0 && frame.sec_sesstype == 0
#############################################################
### unencrypted session, handled by commissioning
var session = self.device.sessions.find_session_source_id_unsecure(frame.source_node_id, 90) # 90 seconds max
tasmota.log("MTR: find session by source_node_id = " + str(frame.source_node_id) + " session_id = " + str(session.local_session_id), 3)
tasmota.log("MTR: find session by source_node_id = " + str(frame.source_node_id) + " session_id = " + str(session.local_session_id), 4)
if addr session._ip = addr end
if port session._port = port end
session._message_handler = self
@ -166,7 +166,7 @@ class Matter_MessageHandler
var protocol_id = frame.protocol_id
if protocol_id == 0x0000 # PROTOCOL_ID_SECURE_CHANNEL
# it should not be encrypted
tasmota.log("MTR: PROTOCOL_ID_SECURE_CHANNEL " + matter.inspect(frame), 3)
# tasmota.log("MTR: PROTOCOL_ID_SECURE_CHANNEL " + matter.inspect(frame), 3)
if frame.opcode == 0x10 # MRPStandaloneAcknowledgement
ret = self.im.process_incoming_ack(frame)
if ret

View File

@ -279,9 +279,9 @@ class Matter_Session_Store
var sessions = self.sessions
while i < size(sessions)
var session = sessions[i]
tasmota.log(string.format("MTR: session.resumption_id=%s vs %s", str(session.resumption_id), str(resumption_id)))
tasmota.log(string.format("MTR: session.resumption_id=%s vs %s", str(session.resumption_id), str(resumption_id)), 3)
if session.resumption_id == resumption_id && session.shared_secret != nil
tasmota.log(string.format("MTR: session.shared_secret=%s", str(session.shared_secret)))
tasmota.log(string.format("MTR: session.shared_secret=%s", str(session.shared_secret)), 3)
session.update()
return session
end

View File

@ -268,7 +268,7 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[53]) { /* constants */
( &(const bvalue[49]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(string),
/* K2 */ be_nested_str_weak(session),
@ -312,20 +312,16 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
/* K40 */ be_nested_str_weak(commissioning_salt),
/* K41 */ be_nested_str_weak(pbkdf_parameters_iterations),
/* K42 */ be_nested_str_weak(commissioning_iterations),
/* K43 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_X3A_X20),
/* K44 */ be_nested_str_weak(inspect),
/* K45 */ be_nested_str_weak(tlv2raw),
/* K46 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_raw_X3A_X20),
/* K47 */ be_nested_str_weak(tohex),
/* K48 */ be_nested_str_weak(__Msg2),
/* K49 */ be_nested_str_weak(build_response),
/* K50 */ be_nested_str_weak(encode_frame),
/* K51 */ be_nested_str_weak(responder),
/* K52 */ be_nested_str_weak(send_response_frame),
/* K43 */ be_nested_str_weak(tlv2raw),
/* K44 */ be_nested_str_weak(__Msg2),
/* K45 */ be_nested_str_weak(build_response),
/* K46 */ be_nested_str_weak(encode_frame),
/* K47 */ be_nested_str_weak(responder),
/* K48 */ be_nested_str_weak(send_response_frame),
}),
be_str_weak(parse_PBKDFParamRequest),
&be_const_str_solidified,
( &(const binstruction[137]) { /* code */
( &(const binstruction[119]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0xA40E0200, // 0001 IMPORT R3 K1
0x88100302, // 0002 GETMBR R4 R1 K2
@ -429,40 +425,22 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
0x881C011B, // 0064 GETMBR R7 R0 K27
0x881C0F2A, // 0065 GETMBR R7 R7 K42
0x901A5207, // 0066 SETMBR R6 K41 R7
0xB81E0E00, // 0067 GETNGBL R7 K7
0x8C1C0F08, // 0068 GETMET R7 R7 K8
0x60240008, // 0069 GETGBL R9 G8
0xB82A1C00, // 006A GETNGBL R10 K14
0x8C28152C, // 006B GETMET R10 R10 K44
0x5C300C00, // 006C MOVE R12 R6
0x7C280400, // 006D CALL R10 2
0x7C240200, // 006E CALL R9 1
0x00265609, // 006F ADD R9 K43 R9
0x542A0003, // 0070 LDINT R10 4
0x7C1C0600, // 0071 CALL R7 3
0x8C1C0D2D, // 0072 GETMET R7 R6 K45
0x7C1C0200, // 0073 CALL R7 1
0xB8220E00, // 0074 GETNGBL R8 K7
0x8C201108, // 0075 GETMET R8 R8 K8
0x8C280F2F, // 0076 GETMET R10 R7 K47
0x7C280200, // 0077 CALL R10 1
0x002A5C0A, // 0078 ADD R10 K46 R10
0x542E0003, // 0079 LDINT R11 4
0x7C200600, // 007A CALL R8 3
0x90126007, // 007B SETMBR R4 K48 R7
0x8C200331, // 007C GETMET R8 R1 K49
0x542A0020, // 007D LDINT R10 33
0x502C0200, // 007E LDBOOL R11 1 0
0x7C200600, // 007F CALL R8 3
0x8C241132, // 0080 GETMET R9 R8 K50
0x5C2C0E00, // 0081 MOVE R11 R7
0x7C240400, // 0082 CALL R9 2
0x88280133, // 0083 GETMBR R10 R0 K51
0x8C281534, // 0084 GETMET R10 R10 K52
0x5C301000, // 0085 MOVE R12 R8
0x7C280400, // 0086 CALL R10 2
0x50280200, // 0087 LDBOOL R10 1 0
0x80041400, // 0088 RET 1 R10
0x8C1C0D2B, // 0067 GETMET R7 R6 K43
0x7C1C0200, // 0068 CALL R7 1
0x90125807, // 0069 SETMBR R4 K44 R7
0x8C20032D, // 006A GETMET R8 R1 K45
0x542A0020, // 006B LDINT R10 33
0x502C0200, // 006C LDBOOL R11 1 0
0x7C200600, // 006D CALL R8 3
0x8C24112E, // 006E GETMET R9 R8 K46
0x5C2C0E00, // 006F MOVE R11 R7
0x7C240400, // 0070 CALL R9 2
0x8828012F, // 0071 GETMBR R10 R0 K47
0x8C281530, // 0072 GETMET R10 R10 K48
0x5C301000, // 0073 MOVE R12 R8
0x7C280400, // 0074 CALL R10 2
0x50280200, // 0075 LDBOOL R10 1 0
0x80041400, // 0076 RET 1 R10
})
)
);
@ -907,7 +885,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[99]) { /* constants */
( &(const bvalue[101]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(opcode),
/* K2 */ be_nested_str_weak(local_session_id),
@ -967,50 +945,52 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
/* K56 */ be_nested_str_weak(MTR_X3A_X20initiatorNOCTLV_X20_X3D_X20),
/* K57 */ be_nested_str_weak(findsub),
/* K58 */ be_nested_str_weak(int),
/* K59 */ be_nested_str_weak(int64),
/* K60 */ be_nested_str_weak(peer_node_id),
/* K61 */ be_nested_str_weak(tobytes),
/* K62 */ be_nested_str_weak(MTR_X3A_X20initiatorFabricId_X3D),
/* K63 */ be_nested_str_weak(Matter_TLV_struct),
/* K64 */ be_nested_str_weak(add_TLV),
/* K65 */ be_nested_str_weak(B1),
/* K66 */ be_nested_str_weak(__initiator_pub),
/* K67 */ be_nested_str_weak(__responder_pub),
/* K68 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20sigma3_tbs_X20_X20_X20_X20_X3D_X20),
/* K69 */ be_nested_str_weak(tlv2raw),
/* K70 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20sigma3_tbs_raw_X3D_X20),
/* K71 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20initiatorNOCPubKey_X3D_X20),
/* K72 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20ec_signature_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K73 */ be_nested_str_weak(EC_P256),
/* K74 */ be_nested_str_weak(ecdsa_verify_sha256),
/* K75 */ be_nested_str_weak(MTR_X3A_X20sigma3_tbs_X20does_X20not_X20have_X20a_X20valid_X20signature),
/* K76 */ be_nested_str_weak(MTR_X3A_X20Sigma3_X20verified_X2C_X20computing_X20new_X20keys),
/* K77 */ be_nested_str_weak(Msg3),
/* K78 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20__Msg1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K79 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20__Msg2_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K80 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20__Msg3_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K81 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TranscriptHash_X20_X20_X20_X20_X3D_X20),
/* K82 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
/* K83 */ be_nested_str_weak(MTR_X3A_X20shared_secret_X20_X3D),
/* K84 */ be_nested_str_weak(MTR_X3A_X20ipk_X20_X2B_X20hash_X20_X20_X20_X20_X3D),
/* K85 */ be_nested_str_weak(SEKeys_Info),
/* K86 */ be_nested_str_weak(rtc),
/* K87 */ be_nested_str_weak(utc),
/* K88 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
/* K89 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
/* K90 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
/* K91 */ be_nested_str_weak(close),
/* K92 */ be_nested_str_weak(set_keys),
/* K93 */ be_nested_str_weak(_breadcrumb),
/* K94 */ be_nested_str_weak(counter_snd_next),
/* K95 */ be_nested_str_weak(set_persist),
/* K96 */ be_nested_str_weak(set_no_expiration),
/* K97 */ be_nested_str_weak(persist_to_fabric),
/* K98 */ be_nested_str_weak(save),
/* K59 */ be_nested_str_weak(peer_node_id),
/* K60 */ be_nested_str_weak(int64),
/* K61 */ be_nested_str_weak(fromu32),
/* K62 */ be_nested_str_weak(tobytes),
/* K63 */ be_nested_str_weak(MTR_X3A_X20initiatorFabricId_X3D),
/* K64 */ be_nested_str_weak(Matter_TLV_struct),
/* K65 */ be_nested_str_weak(add_TLV),
/* K66 */ be_nested_str_weak(B1),
/* K67 */ be_nested_str_weak(__initiator_pub),
/* K68 */ be_nested_str_weak(__responder_pub),
/* K69 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20sigma3_tbs_X20_X20_X20_X20_X3D_X20),
/* K70 */ be_nested_str_weak(tlv2raw),
/* K71 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20sigma3_tbs_raw_X3D_X20),
/* K72 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20initiatorNOCPubKey_X3D_X20),
/* K73 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20ec_signature_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K74 */ be_nested_str_weak(EC_P256),
/* K75 */ be_nested_str_weak(ecdsa_verify_sha256),
/* K76 */ be_nested_str_weak(MTR_X3A_X20sigma3_tbs_X20does_X20not_X20have_X20a_X20valid_X20signature),
/* K77 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X20Invalid_X20signature_X2C_X20trying_X20anyways),
/* K78 */ be_nested_str_weak(MTR_X3A_X20Sigma3_X20verified_X2C_X20computing_X20new_X20keys),
/* K79 */ be_nested_str_weak(Msg3),
/* K80 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20__Msg1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K81 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20__Msg2_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K82 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20__Msg3_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K83 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TranscriptHash_X20_X20_X20_X20_X3D_X20),
/* K84 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
/* K85 */ be_nested_str_weak(MTR_X3A_X20shared_secret_X20_X3D),
/* K86 */ be_nested_str_weak(MTR_X3A_X20ipk_X20_X2B_X20hash_X20_X20_X20_X20_X3D),
/* K87 */ be_nested_str_weak(SEKeys_Info),
/* K88 */ be_nested_str_weak(rtc),
/* K89 */ be_nested_str_weak(utc),
/* K90 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
/* K91 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
/* K92 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
/* K93 */ be_nested_str_weak(close),
/* K94 */ be_nested_str_weak(set_keys),
/* K95 */ be_nested_str_weak(_breadcrumb),
/* K96 */ be_nested_str_weak(counter_snd_next),
/* K97 */ be_nested_str_weak(set_persist),
/* K98 */ be_nested_str_weak(set_no_expiration),
/* K99 */ be_nested_str_weak(persist_to_fabric),
/* K100 */ be_nested_str_weak(save),
}),
be_str_weak(parse_Sigma3),
&be_const_str_solidified,
( &(const binstruction[558]) { /* code */
( &(const binstruction[554]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x880C0301, // 0001 GETMBR R3 R1 K1
0x54120031, // 0002 LDINT R4 50
@ -1291,284 +1271,280 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0x5C582800, // 0115 MOVE R22 R20
0x7C540200, // 0116 CALL R21 1
0x1C542B3A, // 0117 EQ R21 R21 K58
0x78560003, // 0118 JMPF R21 #011D
0xB8567600, // 0119 GETNGBL R21 K59
0x5C582800, // 011A MOVE R22 R20
0x7C540200, // 011B CALL R21 1
0x5C502A00, // 011C MOVE R20 R21
0x8C54293D, // 011D GETMET R21 R20 K61
0x78560007, // 0118 JMPF R21 #0121
0xB8567800, // 0119 GETNGBL R21 K60
0x8C542B3D, // 011A GETMET R21 R21 K61
0x5C5C2800, // 011B MOVE R23 R20
0x7C540400, // 011C CALL R21 2
0x8C542B3E, // 011D GETMET R21 R21 K62
0x7C540200, // 011E CALL R21 1
0x900E7815, // 011F SETMBR R3 K60 R21
0xB8560A00, // 0120 GETNGBL R21 K5
0x8C542B06, // 0121 GETMET R21 R21 K6
0x605C0008, // 0122 GETGBL R23 G8
0x8860073C, // 0123 GETMBR R24 R3 K60
0x7C5C0200, // 0124 CALL R23 1
0x005E7C17, // 0125 ADD R23 K62 R23
0x58600034, // 0126 LDCONST R24 K52
0x7C540600, // 0127 CALL R21 3
0xB8561800, // 0128 GETNGBL R21 K12
0x88542B31, // 0129 GETMBR R21 R21 K49
0x8C542B3F, // 012A GETMET R21 R21 K63
0x7C540200, // 012B CALL R21 1
0x8C582B40, // 012C GETMET R22 R21 K64
0x5860000A, // 012D LDCONST R24 K10
0xB8661800, // 012E GETNGBL R25 K12
0x88643331, // 012F GETMBR R25 R25 K49
0x88643341, // 0130 GETMBR R25 R25 K65
0x5C681C00, // 0131 MOVE R26 R14
0x7C580800, // 0132 CALL R22 4
0x8C582B40, // 0133 GETMET R22 R21 K64
0x58600008, // 0134 LDCONST R24 K8
0xB8661800, // 0135 GETNGBL R25 K12
0x88643331, // 0136 GETMBR R25 R25 K49
0x88643341, // 0137 GETMBR R25 R25 K65
0x5C681E00, // 0138 MOVE R26 R15
0x7C580800, // 0139 CALL R22 4
0x8C582B40, // 013A GETMET R22 R21 K64
0x58600034, // 013B LDCONST R24 K52
0xB8661800, // 013C GETNGBL R25 K12
0x88643331, // 013D GETMBR R25 R25 K49
0x88643341, // 013E GETMBR R25 R25 K65
0x88680742, // 013F GETMBR R26 R3 K66
0x7C580800, // 0140 CALL R22 4
0x8C582B40, // 0141 GETMET R22 R21 K64
0x54620003, // 0142 LDINT R24 4
0xB8661800, // 0143 GETNGBL R25 K12
0x88643331, // 0144 GETMBR R25 R25 K49
0x88643341, // 0145 GETMBR R25 R25 K65
0x88680743, // 0146 GETMBR R26 R3 K67
0x7C580800, // 0147 CALL R22 4
0xB85A0A00, // 0148 GETNGBL R22 K5
0x8C582D06, // 0149 GETMET R22 R22 K6
0x60600008, // 014A GETGBL R24 G8
0x5C642A00, // 014B MOVE R25 R21
0x7C600200, // 014C CALL R24 1
0x00628818, // 014D ADD R24 K68 R24
0x54660003, // 014E LDINT R25 4
0x7C580600, // 014F CALL R22 3
0x8C582B45, // 0150 GETMET R22 R21 K69
0x7C580200, // 0151 CALL R22 1
0xB85E0A00, // 0152 GETNGBL R23 K5
0x8C5C2F06, // 0153 GETMET R23 R23 K6
0x8C642D1E, // 0154 GETMET R25 R22 K30
0x7C640200, // 0155 CALL R25 1
0x00668C19, // 0156 ADD R25 K70 R25
0x546A0003, // 0157 LDINT R26 4
0x7C5C0600, // 0158 CALL R23 3
0xB85E0A00, // 0159 GETNGBL R23 K5
0x8C5C2F06, // 015A GETMET R23 R23 K6
0x8C64251E, // 015B GETMET R25 R18 K30
0x7C640200, // 015C CALL R25 1
0x00668E19, // 015D ADD R25 K71 R25
0x546A0003, // 015E LDINT R26 4
0x7C5C0600, // 015F CALL R23 3
0xB85E0A00, // 0160 GETNGBL R23 K5
0x8C5C2F06, // 0161 GETMET R23 R23 K6
0x8C64211E, // 0162 GETMET R25 R16 K30
0x7C640200, // 0163 CALL R25 1
0x00669019, // 0164 ADD R25 K72 R25
0x546A0003, // 0165 LDINT R26 4
0x7C5C0600, // 0166 CALL R23 3
0xB85E0A00, // 0167 GETNGBL R23 K5
0x8C5C2F06, // 0168 GETMET R23 R23 K6
0x58640011, // 0169 LDCONST R25 K17
0x546A0003, // 016A LDINT R26 4
0x7C5C0600, // 016B CALL R23 3
0x8C5C0549, // 016C GETMET R23 R2 K73
0x7C5C0200, // 016D CALL R23 1
0x8C5C2F4A, // 016E GETMET R23 R23 K74
0x5C642400, // 016F MOVE R25 R18
0x5C682C00, // 0170 MOVE R26 R22
0x5C6C2000, // 0171 MOVE R27 R16
0x7C5C0800, // 0172 CALL R23 4
0x5C602E00, // 0173 MOVE R24 R23
0x74620012, // 0174 JMPT R24 #0188
0xB8620A00, // 0175 GETNGBL R24 K5
0x8C603106, // 0176 GETMET R24 R24 K6
0x5868004B, // 0177 LDCONST R26 K75
0x586C0008, // 0178 LDCONST R27 K8
0x7C600600, // 0179 CALL R24 3
0xB8620A00, // 017A GETNGBL R24 K5
0x8C603106, // 017B GETMET R24 R24 K6
0x58680007, // 017C LDCONST R26 K7
0x586C0008, // 017D LDCONST R27 K8
0x7C600600, // 017E CALL R24 3
0x8C600109, // 017F GETMET R24 R0 K9
0x5C680200, // 0180 MOVE R26 R1
0x586C000A, // 0181 LDCONST R27 K10
0x58700003, // 0182 LDCONST R28 K3
0x58740008, // 0183 LDCONST R29 K8
0x50780000, // 0184 LDBOOL R30 0 0
0x7C600C00, // 0185 CALL R24 6
0x50640000, // 0186 LDBOOL R25 0 0
0x80043200, // 0187 RET 1 R25
0xB8620A00, // 0188 GETNGBL R24 K5
0x8C603106, // 0189 GETMET R24 R24 K6
0x5868004C, // 018A LDCONST R26 K76
0x586C0034, // 018B LDCONST R27 K52
0x7C600600, // 018C CALL R24 3
0x8C600512, // 018D GETMET R24 R2 K18
0x7C600200, // 018E CALL R24 1
0x8C603113, // 018F GETMET R24 R24 K19
0x88680714, // 0190 GETMBR R26 R3 K20
0x7C600400, // 0191 CALL R24 2
0x8C603113, // 0192 GETMET R24 R24 K19
0x88680715, // 0193 GETMBR R26 R3 K21
0x7C600400, // 0194 CALL R24 2
0x8C603113, // 0195 GETMET R24 R24 K19
0x8868094D, // 0196 GETMBR R26 R4 K77
0x7C600400, // 0197 CALL R24 2
0x8C603116, // 0198 GETMET R24 R24 K22
0x7C600200, // 0199 CALL R24 1
0x5C143000, // 019A MOVE R5 R24
0xB8620A00, // 019B GETNGBL R24 K5
0x8C603106, // 019C GETMET R24 R24 K6
0x88680714, // 019D GETMBR R26 R3 K20
0x8C68351E, // 019E GETMET R26 R26 K30
0x7C680200, // 019F CALL R26 1
0x006A9C1A, // 01A0 ADD R26 K78 R26
0x546E0003, // 01A1 LDINT R27 4
0x7C600600, // 01A2 CALL R24 3
0xB8620A00, // 01A3 GETNGBL R24 K5
0x8C603106, // 01A4 GETMET R24 R24 K6
0x88680715, // 01A5 GETMBR R26 R3 K21
0x8C68351E, // 01A6 GETMET R26 R26 K30
0x7C680200, // 01A7 CALL R26 1
0x006A9E1A, // 01A8 ADD R26 K79 R26
0x546E0003, // 01A9 LDINT R27 4
0x7C600600, // 01AA CALL R24 3
0xB8620A00, // 01AB GETNGBL R24 K5
0x8C603106, // 01AC GETMET R24 R24 K6
0x8868094D, // 01AD GETMBR R26 R4 K77
0x8C68351E, // 01AE GETMET R26 R26 K30
0x7C680200, // 01AF CALL R26 1
0x006AA01A, // 01B0 ADD R26 K80 R26
0x546E0003, // 01B1 LDINT R27 4
0x7C600600, // 01B2 CALL R24 3
0xB8620A00, // 01B3 GETNGBL R24 K5
0x8C603106, // 01B4 GETMET R24 R24 K6
0x8C680B1E, // 01B5 GETMET R26 R5 K30
0x7C680200, // 01B6 CALL R26 1
0x006AA21A, // 01B7 ADD R26 K81 R26
0x546E0003, // 01B8 LDINT R27 4
0x7C600600, // 01B9 CALL R24 3
0x4C600000, // 01BA LDNIL R24
0x900E2818, // 01BB SETMBR R3 K20 R24
0x4C600000, // 01BC LDNIL R24
0x900E2A18, // 01BD SETMBR R3 K21 R24
0xB8620A00, // 01BE GETNGBL R24 K5
0x8C603106, // 01BF GETMET R24 R24 K6
0x58680052, // 01C0 LDCONST R26 K82
0x546E0003, // 01C1 LDINT R27 4
0x7C600600, // 01C2 CALL R24 3
0xB8620A00, // 01C3 GETNGBL R24 K5
0x8C603106, // 01C4 GETMET R24 R24 K6
0x88680724, // 01C5 GETMBR R26 R3 K36
0x8C68351E, // 01C6 GETMET R26 R26 K30
0x7C680200, // 01C7 CALL R26 1
0x006AA61A, // 01C8 ADD R26 K83 R26
0x546E0003, // 01C9 LDINT R27 4
0x7C600600, // 01CA CALL R24 3
0xB8620A00, // 01CB GETNGBL R24 K5
0x8C603106, // 01CC GETMET R24 R24 K6
0x8C68071D, // 01CD GETMET R26 R3 K29
0x7C680200, // 01CE CALL R26 1
0x00683405, // 01CF ADD R26 R26 R5
0x8C68351E, // 01D0 GETMET R26 R26 K30
0x7C680200, // 01D1 CALL R26 1
0x006AA81A, // 01D2 ADD R26 K84 R26
0x546E0003, // 01D3 LDINT R27 4
0x7C600600, // 01D4 CALL R24 3
0x8C600522, // 01D5 GETMET R24 R2 K34
0x7C600200, // 01D6 CALL R24 1
0x8C603123, // 01D7 GETMET R24 R24 K35
0x88680724, // 01D8 GETMBR R26 R3 K36
0x8C6C071D, // 01D9 GETMET R27 R3 K29
0x7C6C0200, // 01DA CALL R27 1
0x006C3605, // 01DB ADD R27 R27 R5
0x60700015, // 01DC GETGBL R28 G21
0x7C700000, // 01DD CALL R28 0
0x8C703920, // 01DE GETMET R28 R28 K32
0x88780155, // 01DF GETMBR R30 R0 K85
0x7C700400, // 01E0 CALL R28 2
0x5476002F, // 01E1 LDINT R29 48
0x7C600A00, // 01E2 CALL R24 5
0x5466000E, // 01E3 LDINT R25 15
0x40660619, // 01E4 CONNECT R25 K3 R25
0x94643019, // 01E5 GETIDX R25 R24 R25
0x546A000F, // 01E6 LDINT R26 16
0x546E001E, // 01E7 LDINT R27 31
0x4068341B, // 01E8 CONNECT R26 R26 R27
0x9468301A, // 01E9 GETIDX R26 R24 R26
0x546E001F, // 01EA LDINT R27 32
0x5472002E, // 01EB LDINT R28 47
0x406C361C, // 01EC CONNECT R27 R27 R28
0x946C301B, // 01ED GETIDX R27 R24 R27
0xB8720A00, // 01EE GETNGBL R28 K5
0x8C703956, // 01EF GETMET R28 R28 K86
0x7C700200, // 01F0 CALL R28 1
0x94703957, // 01F1 GETIDX R28 R28 K87
0xB8760A00, // 01F2 GETNGBL R29 K5
0x8C743B06, // 01F3 GETMET R29 R29 K6
0x587C0052, // 01F4 LDCONST R31 K82
0x54820003, // 01F5 LDINT R32 4
0x7C740600, // 01F6 CALL R29 3
0xB8760A00, // 01F7 GETNGBL R29 K5
0x8C743B06, // 01F8 GETMET R29 R29 K6
0x8C7C331E, // 01F9 GETMET R31 R25 K30
0x7C7C0200, // 01FA CALL R31 1
0x007EB01F, // 01FB ADD R31 K88 R31
0x54820003, // 01FC LDINT R32 4
0x7C740600, // 01FD CALL R29 3
0xB8760A00, // 01FE GETNGBL R29 K5
0x8C743B06, // 01FF GETMET R29 R29 K6
0x8C7C351E, // 0200 GETMET R31 R26 K30
0x7C7C0200, // 0201 CALL R31 1
0x007EB21F, // 0202 ADD R31 K89 R31
0x54820003, // 0203 LDINT R32 4
0x7C740600, // 0204 CALL R29 3
0xB8760A00, // 0205 GETNGBL R29 K5
0x8C743B06, // 0206 GETMET R29 R29 K6
0x8C7C371E, // 0207 GETMET R31 R27 K30
0x7C7C0200, // 0208 CALL R31 1
0x007EB41F, // 0209 ADD R31 K90 R31
0x54820003, // 020A LDINT R32 4
0x7C740600, // 020B CALL R29 3
0xB8760A00, // 020C GETNGBL R29 K5
0x8C743B06, // 020D GETMET R29 R29 K6
0x587C0052, // 020E LDCONST R31 K82
0x54820003, // 020F LDINT R32 4
0x7C740600, // 0210 CALL R29 3
0x8C740109, // 0211 GETMET R29 R0 K9
0x5C7C0200, // 0212 MOVE R31 R1
0x58800003, // 0213 LDCONST R32 K3
0x58840003, // 0214 LDCONST R33 K3
0x58880003, // 0215 LDCONST R34 K3
0x508C0200, // 0216 LDBOOL R35 1 0
0x7C740C00, // 0217 CALL R29 6
0x8C78075B, // 0218 GETMET R30 R3 K91
0x7C780200, // 0219 CALL R30 1
0x8C78075C, // 021A GETMET R30 R3 K92
0x5C803200, // 021B MOVE R32 R25
0x5C843400, // 021C MOVE R33 R26
0x5C883600, // 021D MOVE R34 R27
0x5C8C3800, // 021E MOVE R35 R28
0x7C780A00, // 021F CALL R30 5
0x900EBB03, // 0220 SETMBR R3 K93 K3
0x8C78075E, // 0221 GETMET R30 R3 K94
0x7C780200, // 0222 CALL R30 1
0x8C78075F, // 0223 GETMET R30 R3 K95
0x50800200, // 0224 LDBOOL R32 1 0
0x7C780400, // 0225 CALL R30 2
0x8C780760, // 0226 GETMET R30 R3 K96
0x900E7615, // 011F SETMBR R3 K59 R21
0x70020002, // 0120 JMP #0124
0x8C54293E, // 0121 GETMET R21 R20 K62
0x7C540200, // 0122 CALL R21 1
0x900E7615, // 0123 SETMBR R3 K59 R21
0xB8560A00, // 0124 GETNGBL R21 K5
0x8C542B06, // 0125 GETMET R21 R21 K6
0x605C0008, // 0126 GETGBL R23 G8
0x8860073B, // 0127 GETMBR R24 R3 K59
0x7C5C0200, // 0128 CALL R23 1
0x005E7E17, // 0129 ADD R23 K63 R23
0x58600034, // 012A LDCONST R24 K52
0x7C540600, // 012B CALL R21 3
0xB8561800, // 012C GETNGBL R21 K12
0x88542B31, // 012D GETMBR R21 R21 K49
0x8C542B40, // 012E GETMET R21 R21 K64
0x7C540200, // 012F CALL R21 1
0x8C582B41, // 0130 GETMET R22 R21 K65
0x5860000A, // 0131 LDCONST R24 K10
0xB8661800, // 0132 GETNGBL R25 K12
0x88643331, // 0133 GETMBR R25 R25 K49
0x88643342, // 0134 GETMBR R25 R25 K66
0x5C681C00, // 0135 MOVE R26 R14
0x7C580800, // 0136 CALL R22 4
0x8C582B41, // 0137 GETMET R22 R21 K65
0x58600008, // 0138 LDCONST R24 K8
0xB8661800, // 0139 GETNGBL R25 K12
0x88643331, // 013A GETMBR R25 R25 K49
0x88643342, // 013B GETMBR R25 R25 K66
0x5C681E00, // 013C MOVE R26 R15
0x7C580800, // 013D CALL R22 4
0x8C582B41, // 013E GETMET R22 R21 K65
0x58600034, // 013F LDCONST R24 K52
0xB8661800, // 0140 GETNGBL R25 K12
0x88643331, // 0141 GETMBR R25 R25 K49
0x88643342, // 0142 GETMBR R25 R25 K66
0x88680743, // 0143 GETMBR R26 R3 K67
0x7C580800, // 0144 CALL R22 4
0x8C582B41, // 0145 GETMET R22 R21 K65
0x54620003, // 0146 LDINT R24 4
0xB8661800, // 0147 GETNGBL R25 K12
0x88643331, // 0148 GETMBR R25 R25 K49
0x88643342, // 0149 GETMBR R25 R25 K66
0x88680744, // 014A GETMBR R26 R3 K68
0x7C580800, // 014B CALL R22 4
0xB85A0A00, // 014C GETNGBL R22 K5
0x8C582D06, // 014D GETMET R22 R22 K6
0x60600008, // 014E GETGBL R24 G8
0x5C642A00, // 014F MOVE R25 R21
0x7C600200, // 0150 CALL R24 1
0x00628A18, // 0151 ADD R24 K69 R24
0x54660003, // 0152 LDINT R25 4
0x7C580600, // 0153 CALL R22 3
0x8C582B46, // 0154 GETMET R22 R21 K70
0x7C580200, // 0155 CALL R22 1
0xB85E0A00, // 0156 GETNGBL R23 K5
0x8C5C2F06, // 0157 GETMET R23 R23 K6
0x8C642D1E, // 0158 GETMET R25 R22 K30
0x7C640200, // 0159 CALL R25 1
0x00668E19, // 015A ADD R25 K71 R25
0x546A0003, // 015B LDINT R26 4
0x7C5C0600, // 015C CALL R23 3
0xB85E0A00, // 015D GETNGBL R23 K5
0x8C5C2F06, // 015E GETMET R23 R23 K6
0x8C64251E, // 015F GETMET R25 R18 K30
0x7C640200, // 0160 CALL R25 1
0x00669019, // 0161 ADD R25 K72 R25
0x546A0003, // 0162 LDINT R26 4
0x7C5C0600, // 0163 CALL R23 3
0xB85E0A00, // 0164 GETNGBL R23 K5
0x8C5C2F06, // 0165 GETMET R23 R23 K6
0x8C64211E, // 0166 GETMET R25 R16 K30
0x7C640200, // 0167 CALL R25 1
0x00669219, // 0168 ADD R25 K73 R25
0x546A0003, // 0169 LDINT R26 4
0x7C5C0600, // 016A CALL R23 3
0xB85E0A00, // 016B GETNGBL R23 K5
0x8C5C2F06, // 016C GETMET R23 R23 K6
0x58640011, // 016D LDCONST R25 K17
0x546A0003, // 016E LDINT R26 4
0x7C5C0600, // 016F CALL R23 3
0x8C5C054A, // 0170 GETMET R23 R2 K74
0x7C5C0200, // 0171 CALL R23 1
0x8C5C2F4B, // 0172 GETMET R23 R23 K75
0x5C642400, // 0173 MOVE R25 R18
0x5C682C00, // 0174 MOVE R26 R22
0x5C6C2000, // 0175 MOVE R27 R16
0x7C5C0800, // 0176 CALL R23 4
0x5C602E00, // 0177 MOVE R24 R23
0x7462000A, // 0178 JMPT R24 #0184
0xB8620A00, // 0179 GETNGBL R24 K5
0x8C603106, // 017A GETMET R24 R24 K6
0x5868004C, // 017B LDCONST R26 K76
0x586C0008, // 017C LDCONST R27 K8
0x7C600600, // 017D CALL R24 3
0xB8620A00, // 017E GETNGBL R24 K5
0x8C603106, // 017F GETMET R24 R24 K6
0x5868004D, // 0180 LDCONST R26 K77
0x586C0008, // 0181 LDCONST R27 K8
0x7C600600, // 0182 CALL R24 3
0x70020004, // 0183 JMP #0189
0xB8620A00, // 0184 GETNGBL R24 K5
0x8C603106, // 0185 GETMET R24 R24 K6
0x5868004E, // 0186 LDCONST R26 K78
0x586C0034, // 0187 LDCONST R27 K52
0x7C600600, // 0188 CALL R24 3
0x8C600512, // 0189 GETMET R24 R2 K18
0x7C600200, // 018A CALL R24 1
0x8C603113, // 018B GETMET R24 R24 K19
0x88680714, // 018C GETMBR R26 R3 K20
0x7C600400, // 018D CALL R24 2
0x8C603113, // 018E GETMET R24 R24 K19
0x88680715, // 018F GETMBR R26 R3 K21
0x7C600400, // 0190 CALL R24 2
0x8C603113, // 0191 GETMET R24 R24 K19
0x8868094F, // 0192 GETMBR R26 R4 K79
0x7C600400, // 0193 CALL R24 2
0x8C603116, // 0194 GETMET R24 R24 K22
0x7C600200, // 0195 CALL R24 1
0x5C143000, // 0196 MOVE R5 R24
0xB8620A00, // 0197 GETNGBL R24 K5
0x8C603106, // 0198 GETMET R24 R24 K6
0x88680714, // 0199 GETMBR R26 R3 K20
0x8C68351E, // 019A GETMET R26 R26 K30
0x7C680200, // 019B CALL R26 1
0x006AA01A, // 019C ADD R26 K80 R26
0x546E0003, // 019D LDINT R27 4
0x7C600600, // 019E CALL R24 3
0xB8620A00, // 019F GETNGBL R24 K5
0x8C603106, // 01A0 GETMET R24 R24 K6
0x88680715, // 01A1 GETMBR R26 R3 K21
0x8C68351E, // 01A2 GETMET R26 R26 K30
0x7C680200, // 01A3 CALL R26 1
0x006AA21A, // 01A4 ADD R26 K81 R26
0x546E0003, // 01A5 LDINT R27 4
0x7C600600, // 01A6 CALL R24 3
0xB8620A00, // 01A7 GETNGBL R24 K5
0x8C603106, // 01A8 GETMET R24 R24 K6
0x8868094F, // 01A9 GETMBR R26 R4 K79
0x8C68351E, // 01AA GETMET R26 R26 K30
0x7C680200, // 01AB CALL R26 1
0x006AA41A, // 01AC ADD R26 K82 R26
0x546E0003, // 01AD LDINT R27 4
0x7C600600, // 01AE CALL R24 3
0xB8620A00, // 01AF GETNGBL R24 K5
0x8C603106, // 01B0 GETMET R24 R24 K6
0x8C680B1E, // 01B1 GETMET R26 R5 K30
0x7C680200, // 01B2 CALL R26 1
0x006AA61A, // 01B3 ADD R26 K83 R26
0x546E0003, // 01B4 LDINT R27 4
0x7C600600, // 01B5 CALL R24 3
0x4C600000, // 01B6 LDNIL R24
0x900E2818, // 01B7 SETMBR R3 K20 R24
0x4C600000, // 01B8 LDNIL R24
0x900E2A18, // 01B9 SETMBR R3 K21 R24
0xB8620A00, // 01BA GETNGBL R24 K5
0x8C603106, // 01BB GETMET R24 R24 K6
0x58680054, // 01BC LDCONST R26 K84
0x546E0003, // 01BD LDINT R27 4
0x7C600600, // 01BE CALL R24 3
0xB8620A00, // 01BF GETNGBL R24 K5
0x8C603106, // 01C0 GETMET R24 R24 K6
0x88680724, // 01C1 GETMBR R26 R3 K36
0x8C68351E, // 01C2 GETMET R26 R26 K30
0x7C680200, // 01C3 CALL R26 1
0x006AAA1A, // 01C4 ADD R26 K85 R26
0x546E0003, // 01C5 LDINT R27 4
0x7C600600, // 01C6 CALL R24 3
0xB8620A00, // 01C7 GETNGBL R24 K5
0x8C603106, // 01C8 GETMET R24 R24 K6
0x8C68071D, // 01C9 GETMET R26 R3 K29
0x7C680200, // 01CA CALL R26 1
0x00683405, // 01CB ADD R26 R26 R5
0x8C68351E, // 01CC GETMET R26 R26 K30
0x7C680200, // 01CD CALL R26 1
0x006AAC1A, // 01CE ADD R26 K86 R26
0x546E0003, // 01CF LDINT R27 4
0x7C600600, // 01D0 CALL R24 3
0x8C600522, // 01D1 GETMET R24 R2 K34
0x7C600200, // 01D2 CALL R24 1
0x8C603123, // 01D3 GETMET R24 R24 K35
0x88680724, // 01D4 GETMBR R26 R3 K36
0x8C6C071D, // 01D5 GETMET R27 R3 K29
0x7C6C0200, // 01D6 CALL R27 1
0x006C3605, // 01D7 ADD R27 R27 R5
0x60700015, // 01D8 GETGBL R28 G21
0x7C700000, // 01D9 CALL R28 0
0x8C703920, // 01DA GETMET R28 R28 K32
0x88780157, // 01DB GETMBR R30 R0 K87
0x7C700400, // 01DC CALL R28 2
0x5476002F, // 01DD LDINT R29 48
0x7C600A00, // 01DE CALL R24 5
0x5466000E, // 01DF LDINT R25 15
0x40660619, // 01E0 CONNECT R25 K3 R25
0x94643019, // 01E1 GETIDX R25 R24 R25
0x546A000F, // 01E2 LDINT R26 16
0x546E001E, // 01E3 LDINT R27 31
0x4068341B, // 01E4 CONNECT R26 R26 R27
0x9468301A, // 01E5 GETIDX R26 R24 R26
0x546E001F, // 01E6 LDINT R27 32
0x5472002E, // 01E7 LDINT R28 47
0x406C361C, // 01E8 CONNECT R27 R27 R28
0x946C301B, // 01E9 GETIDX R27 R24 R27
0xB8720A00, // 01EA GETNGBL R28 K5
0x8C703958, // 01EB GETMET R28 R28 K88
0x7C700200, // 01EC CALL R28 1
0x94703959, // 01ED GETIDX R28 R28 K89
0xB8760A00, // 01EE GETNGBL R29 K5
0x8C743B06, // 01EF GETMET R29 R29 K6
0x587C0054, // 01F0 LDCONST R31 K84
0x54820003, // 01F1 LDINT R32 4
0x7C740600, // 01F2 CALL R29 3
0xB8760A00, // 01F3 GETNGBL R29 K5
0x8C743B06, // 01F4 GETMET R29 R29 K6
0x8C7C331E, // 01F5 GETMET R31 R25 K30
0x7C7C0200, // 01F6 CALL R31 1
0x007EB41F, // 01F7 ADD R31 K90 R31
0x54820003, // 01F8 LDINT R32 4
0x7C740600, // 01F9 CALL R29 3
0xB8760A00, // 01FA GETNGBL R29 K5
0x8C743B06, // 01FB GETMET R29 R29 K6
0x8C7C351E, // 01FC GETMET R31 R26 K30
0x7C7C0200, // 01FD CALL R31 1
0x007EB61F, // 01FE ADD R31 K91 R31
0x54820003, // 01FF LDINT R32 4
0x7C740600, // 0200 CALL R29 3
0xB8760A00, // 0201 GETNGBL R29 K5
0x8C743B06, // 0202 GETMET R29 R29 K6
0x8C7C371E, // 0203 GETMET R31 R27 K30
0x7C7C0200, // 0204 CALL R31 1
0x007EB81F, // 0205 ADD R31 K92 R31
0x54820003, // 0206 LDINT R32 4
0x7C740600, // 0207 CALL R29 3
0xB8760A00, // 0208 GETNGBL R29 K5
0x8C743B06, // 0209 GETMET R29 R29 K6
0x587C0054, // 020A LDCONST R31 K84
0x54820003, // 020B LDINT R32 4
0x7C740600, // 020C CALL R29 3
0x8C740109, // 020D GETMET R29 R0 K9
0x5C7C0200, // 020E MOVE R31 R1
0x58800003, // 020F LDCONST R32 K3
0x58840003, // 0210 LDCONST R33 K3
0x58880003, // 0211 LDCONST R34 K3
0x508C0200, // 0212 LDBOOL R35 1 0
0x7C740C00, // 0213 CALL R29 6
0x8C78075D, // 0214 GETMET R30 R3 K93
0x7C780200, // 0215 CALL R30 1
0x8C78075E, // 0216 GETMET R30 R3 K94
0x5C803200, // 0217 MOVE R32 R25
0x5C843400, // 0218 MOVE R33 R26
0x5C883600, // 0219 MOVE R34 R27
0x5C8C3800, // 021A MOVE R35 R28
0x7C780A00, // 021B CALL R30 5
0x900EBF03, // 021C SETMBR R3 K95 K3
0x8C780760, // 021D GETMET R30 R3 K96
0x7C780200, // 021E CALL R30 1
0x8C780761, // 021F GETMET R30 R3 K97
0x50800200, // 0220 LDBOOL R32 1 0
0x7C780400, // 0221 CALL R30 2
0x8C780762, // 0222 GETMET R30 R3 K98
0x7C780200, // 0223 CALL R30 1
0x8C780763, // 0224 GETMET R30 R3 K99
0x7C780200, // 0225 CALL R30 1
0x8C780764, // 0226 GETMET R30 R3 K100
0x7C780200, // 0227 CALL R30 1
0x8C780761, // 0228 GETMET R30 R3 K97
0x7C780200, // 0229 CALL R30 1
0x8C780762, // 022A GETMET R30 R3 K98
0x7C780200, // 022B CALL R30 1
0x50780200, // 022C LDBOOL R30 1 0
0x80043C00, // 022D RET 1 R30
0x50780200, // 0228 LDBOOL R30 1 0
0x80043C00, // 0229 RET 1 R30
})
)
);

View File

@ -263,7 +263,7 @@ extern const bclass be_class_Matter_Pake1;
********************************************************************/
be_local_closure(Matter_Pake1_parse, /* name */
be_nested_proto(
8, /* nstack */
7, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@ -271,21 +271,18 @@ be_local_closure(Matter_Pake1_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[10]) { /* constants */
( &(const bvalue[ 7]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
/* K3 */ be_nested_str_weak(parse),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
/* K6 */ be_nested_str_weak(MTR_X3A_X20parsed_X20TLV_X3A_X20),
/* K7 */ be_nested_str_weak(pA),
/* K8 */ be_nested_str_weak(getsubval),
/* K9 */ be_const_int(1),
/* K4 */ be_nested_str_weak(pA),
/* K5 */ be_nested_str_weak(getsubval),
/* K6 */ be_const_int(1),
}),
be_str_weak(parse),
&be_const_str_solidified,
( &(const binstruction[23]) { /* code */
( &(const binstruction[15]) { /* code */
0x4C0C0000, // 0000 LDNIL R3
0x1C0C0403, // 0001 EQ R3 R2 R3
0x780E0000, // 0002 JMPF R3 #0004
@ -296,19 +293,11 @@ be_local_closure(Matter_Pake1_parse, /* name */
0x5C140200, // 0007 MOVE R5 R1
0x5C180400, // 0008 MOVE R6 R2
0x7C0C0600, // 0009 CALL R3 3
0xB8120800, // 000A GETNGBL R4 K4
0x8C100905, // 000B GETMET R4 R4 K5
0x60180008, // 000C GETGBL R6 G8
0x5C1C0600, // 000D MOVE R7 R3
0x7C180200, // 000E CALL R6 1
0x001A0C06, // 000F ADD R6 K6 R6
0x541E0003, // 0010 LDINT R7 4
0x7C100600, // 0011 CALL R4 3
0x8C100708, // 0012 GETMET R4 R3 K8
0x58180009, // 0013 LDCONST R6 K9
0x7C100400, // 0014 CALL R4 2
0x90020E04, // 0015 SETMBR R0 K7 R4
0x80040000, // 0016 RET 1 R0
0x8C100705, // 000A GETMET R4 R3 K5
0x58180006, // 000B LDCONST R6 K6
0x7C100400, // 000C CALL R4 2
0x90020804, // 000D SETMBR R0 K4 R4
0x80040000, // 000E RET 1 R0
})
)
);
@ -423,7 +412,7 @@ extern const bclass be_class_Matter_Pake3;
********************************************************************/
be_local_closure(Matter_Pake3_parse, /* name */
be_nested_proto(
8, /* nstack */
7, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@ -431,21 +420,18 @@ be_local_closure(Matter_Pake3_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[10]) { /* constants */
( &(const bvalue[ 7]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
/* K3 */ be_nested_str_weak(parse),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
/* K6 */ be_nested_str_weak(MTR_X3A_X20parsed_X20TLV_X3A_X20),
/* K7 */ be_nested_str_weak(cA),
/* K8 */ be_nested_str_weak(getsubval),
/* K9 */ be_const_int(1),
/* K4 */ be_nested_str_weak(cA),
/* K5 */ be_nested_str_weak(getsubval),
/* K6 */ be_const_int(1),
}),
be_str_weak(parse),
&be_const_str_solidified,
( &(const binstruction[23]) { /* code */
( &(const binstruction[15]) { /* code */
0x4C0C0000, // 0000 LDNIL R3
0x1C0C0403, // 0001 EQ R3 R2 R3
0x780E0000, // 0002 JMPF R3 #0004
@ -456,19 +442,11 @@ be_local_closure(Matter_Pake3_parse, /* name */
0x5C140200, // 0007 MOVE R5 R1
0x5C180400, // 0008 MOVE R6 R2
0x7C0C0600, // 0009 CALL R3 3
0xB8120800, // 000A GETNGBL R4 K4
0x8C100905, // 000B GETMET R4 R4 K5
0x60180008, // 000C GETGBL R6 G8
0x5C1C0600, // 000D MOVE R7 R3
0x7C180200, // 000E CALL R6 1
0x001A0C06, // 000F ADD R6 K6 R6
0x541E0003, // 0010 LDINT R7 4
0x7C100600, // 0011 CALL R4 3
0x8C100708, // 0012 GETMET R4 R3 K8
0x58180009, // 0013 LDCONST R6 K9
0x7C100400, // 0014 CALL R4 2
0x90020E04, // 0015 SETMBR R0 K7 R4
0x80040000, // 0016 RET 1 R0
0x8C100705, // 000A GETMET R4 R3 K5
0x58180006, // 000B LDCONST R6 K6
0x7C100400, // 000C CALL R4 2
0x90020804, // 000D SETMBR R0 K4 R4
0x80040000, // 000E RET 1 R0
})
)
);
@ -511,34 +489,31 @@ be_local_closure(Matter_Sigma1_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[23]) { /* constants */
( &(const bvalue[20]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
/* K3 */ be_nested_str_weak(parse),
/* K4 */ be_nested_str_weak(Msg1),
/* K5 */ be_const_int(2147483647),
/* K6 */ be_nested_str_weak(tasmota),
/* K7 */ be_nested_str_weak(log),
/* K8 */ be_nested_str_weak(MTR_X3A_X20Sigma1_X20TLV_X3D),
/* K9 */ be_nested_str_weak(initiatorRandom),
/* K10 */ be_nested_str_weak(getsubval),
/* K11 */ be_const_int(1),
/* K12 */ be_nested_str_weak(initiator_session_id),
/* K13 */ be_const_int(2),
/* K14 */ be_nested_str_weak(destinationId),
/* K15 */ be_const_int(3),
/* K16 */ be_nested_str_weak(initiatorEphPubKey),
/* K17 */ be_nested_str_weak(findsub),
/* K18 */ be_nested_str_weak(SLEEPY_IDLE_INTERVAL),
/* K19 */ be_nested_str_weak(findsubval),
/* K20 */ be_nested_str_weak(SLEEPY_ACTIVE_INTERVAL),
/* K21 */ be_nested_str_weak(resumptionID),
/* K22 */ be_nested_str_weak(initiatorResumeMIC),
/* K6 */ be_nested_str_weak(initiatorRandom),
/* K7 */ be_nested_str_weak(getsubval),
/* K8 */ be_const_int(1),
/* K9 */ be_nested_str_weak(initiator_session_id),
/* K10 */ be_const_int(2),
/* K11 */ be_nested_str_weak(destinationId),
/* K12 */ be_const_int(3),
/* K13 */ be_nested_str_weak(initiatorEphPubKey),
/* K14 */ be_nested_str_weak(findsub),
/* K15 */ be_nested_str_weak(SLEEPY_IDLE_INTERVAL),
/* K16 */ be_nested_str_weak(findsubval),
/* K17 */ be_nested_str_weak(SLEEPY_ACTIVE_INTERVAL),
/* K18 */ be_nested_str_weak(resumptionID),
/* K19 */ be_nested_str_weak(initiatorResumeMIC),
}),
be_str_weak(parse),
&be_const_str_solidified,
( &(const binstruction[60]) { /* code */
( &(const binstruction[52]) { /* code */
0x4C0C0000, // 0000 LDNIL R3
0x1C0C0403, // 0001 EQ R3 R2 R3
0x780E0000, // 0002 JMPF R3 #0004
@ -552,53 +527,45 @@ be_local_closure(Matter_Sigma1_parse, /* name */
0x40100505, // 000A CONNECT R4 R2 K5
0x94100204, // 000B GETIDX R4 R1 R4
0x90020804, // 000C SETMBR R0 K4 R4
0xB8120C00, // 000D GETNGBL R4 K6
0x8C100907, // 000E GETMET R4 R4 K7
0x60180008, // 000F GETGBL R6 G8
0x5C1C0600, // 0010 MOVE R7 R3
0x7C180200, // 0011 CALL R6 1
0x001A1006, // 0012 ADD R6 K8 R6
0x541E0003, // 0013 LDINT R7 4
0x7C100600, // 0014 CALL R4 3
0x8C10070A, // 0015 GETMET R4 R3 K10
0x5818000B, // 0016 LDCONST R6 K11
0x8C100707, // 000D GETMET R4 R3 K7
0x58180008, // 000E LDCONST R6 K8
0x7C100400, // 000F CALL R4 2
0x90020C04, // 0010 SETMBR R0 K6 R4
0x8C100707, // 0011 GETMET R4 R3 K7
0x5818000A, // 0012 LDCONST R6 K10
0x7C100400, // 0013 CALL R4 2
0x90021204, // 0014 SETMBR R0 K9 R4
0x8C100707, // 0015 GETMET R4 R3 K7
0x5818000C, // 0016 LDCONST R6 K12
0x7C100400, // 0017 CALL R4 2
0x90021204, // 0018 SETMBR R0 K9 R4
0x8C10070A, // 0019 GETMET R4 R3 K10
0x5818000D, // 001A LDCONST R6 K13
0x90021604, // 0018 SETMBR R0 K11 R4
0x8C100707, // 0019 GETMET R4 R3 K7
0x541A0003, // 001A LDINT R6 4
0x7C100400, // 001B CALL R4 2
0x90021804, // 001C SETMBR R0 K12 R4
0x8C10070A, // 001D GETMET R4 R3 K10
0x5818000F, // 001E LDCONST R6 K15
0x90021A04, // 001C SETMBR R0 K13 R4
0x8C10070E, // 001D GETMET R4 R3 K14
0x541A0004, // 001E LDINT R6 5
0x7C100400, // 001F CALL R4 2
0x90021C04, // 0020 SETMBR R0 K14 R4
0x8C10070A, // 0021 GETMET R4 R3 K10
0x541A0003, // 0022 LDINT R6 4
0x7C100400, // 0023 CALL R4 2
0x90022004, // 0024 SETMBR R0 K16 R4
0x8C100711, // 0025 GETMET R4 R3 K17
0x541A0004, // 0026 LDINT R6 5
0x7C100400, // 0027 CALL R4 2
0x4C140000, // 0028 LDNIL R5
0x20140805, // 0029 NE R5 R4 R5
0x78160007, // 002A JMPF R5 #0033
0x8C140913, // 002B GETMET R5 R4 K19
0x581C000B, // 002C LDCONST R7 K11
0x4C140000, // 0020 LDNIL R5
0x20140805, // 0021 NE R5 R4 R5
0x78160007, // 0022 JMPF R5 #002B
0x8C140910, // 0023 GETMET R5 R4 K16
0x581C0008, // 0024 LDCONST R7 K8
0x7C140400, // 0025 CALL R5 2
0x90021E05, // 0026 SETMBR R0 K15 R5
0x8C140910, // 0027 GETMET R5 R4 K16
0x581C000A, // 0028 LDCONST R7 K10
0x7C140400, // 0029 CALL R5 2
0x90022205, // 002A SETMBR R0 K17 R5
0x8C140710, // 002B GETMET R5 R3 K16
0x541E0005, // 002C LDINT R7 6
0x7C140400, // 002D CALL R5 2
0x90022405, // 002E SETMBR R0 K18 R5
0x8C140913, // 002F GETMET R5 R4 K19
0x581C000D, // 0030 LDCONST R7 K13
0x8C140710, // 002F GETMET R5 R3 K16
0x541E0006, // 0030 LDINT R7 7
0x7C140400, // 0031 CALL R5 2
0x90022805, // 0032 SETMBR R0 K20 R5
0x8C140713, // 0033 GETMET R5 R3 K19
0x541E0005, // 0034 LDINT R7 6
0x7C140400, // 0035 CALL R5 2
0x90022A05, // 0036 SETMBR R0 K21 R5
0x8C140713, // 0037 GETMET R5 R3 K19
0x541E0006, // 0038 LDINT R7 7
0x7C140400, // 0039 CALL R5 2
0x90022C05, // 003A SETMBR R0 K22 R5
0x80040000, // 003B RET 1 R0
0x90022605, // 0032 SETMBR R0 K19 R5
0x80040000, // 0033 RET 1 R0
})
)
);
@ -894,7 +861,7 @@ extern const bclass be_class_Matter_Sigma3;
********************************************************************/
be_local_closure(Matter_Sigma3_parse, /* name */
be_nested_proto(
8, /* nstack */
7, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@ -902,23 +869,20 @@ be_local_closure(Matter_Sigma3_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[12]) { /* constants */
( &(const bvalue[ 9]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
/* K3 */ be_nested_str_weak(parse),
/* K4 */ be_nested_str_weak(Msg3),
/* K5 */ be_const_int(2147483647),
/* K6 */ be_nested_str_weak(tasmota),
/* K7 */ be_nested_str_weak(log),
/* K8 */ be_nested_str_weak(MTR_X3A_X20Sigma3_X20TLV_X3D),
/* K9 */ be_nested_str_weak(TBEData3Encrypted),
/* K10 */ be_nested_str_weak(getsubval),
/* K11 */ be_const_int(1),
/* K6 */ be_nested_str_weak(TBEData3Encrypted),
/* K7 */ be_nested_str_weak(getsubval),
/* K8 */ be_const_int(1),
}),
be_str_weak(parse),
&be_const_str_solidified,
( &(const binstruction[26]) { /* code */
( &(const binstruction[18]) { /* code */
0x4C0C0000, // 0000 LDNIL R3
0x1C0C0403, // 0001 EQ R3 R2 R3
0x780E0000, // 0002 JMPF R3 #0004
@ -932,19 +896,11 @@ be_local_closure(Matter_Sigma3_parse, /* name */
0x40100505, // 000A CONNECT R4 R2 K5
0x94100204, // 000B GETIDX R4 R1 R4
0x90020804, // 000C SETMBR R0 K4 R4
0xB8120C00, // 000D GETNGBL R4 K6
0x8C100907, // 000E GETMET R4 R4 K7
0x60180008, // 000F GETGBL R6 G8
0x5C1C0600, // 0010 MOVE R7 R3
0x7C180200, // 0011 CALL R6 1
0x001A1006, // 0012 ADD R6 K8 R6
0x541E0003, // 0013 LDINT R7 4
0x7C100600, // 0014 CALL R4 3
0x8C10070A, // 0015 GETMET R4 R3 K10
0x5818000B, // 0016 LDCONST R6 K11
0x7C100400, // 0017 CALL R4 2
0x90021204, // 0018 SETMBR R0 K9 R4
0x80040000, // 0019 RET 1 R0
0x8C100707, // 000D GETMET R4 R3 K7
0x58180008, // 000E LDCONST R6 K8
0x7C100400, // 000F CALL R4 2
0x90020C04, // 0010 SETMBR R0 K6 R4
0x80040000, // 0011 RET 1 R0
})
)
);

View File

@ -897,7 +897,7 @@ be_local_closure(Matter_Device_every_250ms, /* name */
********************************************************************/
be_local_closure(Matter_Device_process_attribute_expansion, /* name */
be_nested_proto(
30, /* nstack */
29, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@ -972,37 +972,33 @@ be_local_closure(Matter_Device_process_attribute_expansion, /* name */
),
}),
1, /* has constants */
( &(const bvalue[26]) { /* constants */
( &(const bvalue[22]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(endpoint),
/* K2 */ be_nested_str_weak(cluster),
/* K3 */ be_nested_str_weak(attribute),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
/* K6 */ be_nested_str_weak(format),
/* K7 */ be_nested_str_weak(MTR_X3A_X20process_attribute_expansion_X20_X25s),
/* K8 */ be_nested_str_weak(MTR_X3A_X20endpoint_X3D_X25s_X20cluster_X3D_X25s_X20attribute_X3D_X25s),
/* K9 */ be_nested_str_weak(plugins),
/* K10 */ be_nested_str_weak(get_endpoint),
/* K11 */ be_nested_str_weak(contains),
/* K12 */ be_nested_str_weak(get_cluster_list),
/* K13 */ be_nested_str_weak(MTR_X3A_X20pi_X3D_X25s_X20ep_X3D_X25s_X20cl_list_X3D_X25s),
/* K14 */ be_nested_str_weak(get_attribute_list),
/* K15 */ be_nested_str_weak(MTR_X3A_X20pi_X3D_X25s_X20ep_X3D_X25s_X20cl_X3D_X25s_X20at_list_X3D_X25s),
/* K16 */ be_nested_str_weak(push),
/* K17 */ be_nested_str_weak(stop_iteration),
/* K18 */ be_nested_str_weak(MTR_X3A_X20expansion_X20_X5B_X2502X_X5D_X2504X_X2F_X2504X),
/* K19 */ be_const_int(3),
/* K20 */ be_nested_str_weak(status),
/* K21 */ be_nested_str_weak(matter),
/* K22 */ be_nested_str_weak(UNSUPPORTED_ENDPOINT),
/* K23 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
/* K24 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
/* K25 */ be_nested_str_weak(UNREPORTABLE_ATTRIBUTE),
/* K4 */ be_nested_str_weak(plugins),
/* K5 */ be_nested_str_weak(get_endpoint),
/* K6 */ be_nested_str_weak(contains),
/* K7 */ be_nested_str_weak(get_cluster_list),
/* K8 */ be_nested_str_weak(get_attribute_list),
/* K9 */ be_nested_str_weak(push),
/* K10 */ be_nested_str_weak(stop_iteration),
/* K11 */ be_nested_str_weak(tasmota),
/* K12 */ be_nested_str_weak(log),
/* K13 */ be_nested_str_weak(format),
/* K14 */ be_nested_str_weak(MTR_X3A_X20expansion_X20_X5B_X2502X_X5D_X2504X_X2F_X2504X),
/* K15 */ be_const_int(3),
/* K16 */ be_nested_str_weak(status),
/* K17 */ be_nested_str_weak(matter),
/* K18 */ be_nested_str_weak(UNSUPPORTED_ENDPOINT),
/* K19 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
/* K20 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
/* K21 */ be_nested_str_weak(UNREPORTABLE_ATTRIBUTE),
}),
be_str_weak(process_attribute_expansion),
&be_const_str_solidified,
( &(const binstruction[271]) { /* code */
( &(const binstruction[216]) { /* code */
0x840C0000, // 0000 CLOSURE R3 P0
0xA4120000, // 0001 IMPORT R4 K0
0x88140301, // 0002 GETMBR R5 R1 K1
@ -1025,255 +1021,200 @@ be_local_closure(Matter_Device_process_attribute_expansion, /* name */
0x742E0000, // 0013 JMPT R11 #0015
0x502C0001, // 0014 LDBOOL R11 0 1
0x502C0200, // 0015 LDBOOL R11 1 0
0xB8320800, // 0016 GETNGBL R12 K4
0x8C301905, // 0017 GETMET R12 R12 K5
0x8C380906, // 0018 GETMET R14 R4 K6
0x58400007, // 0019 LDCONST R16 K7
0x60440008, // 001A GETGBL R17 G8
0x5C480200, // 001B MOVE R18 R1
0x7C440200, // 001C CALL R17 1
0x7C380600, // 001D CALL R14 3
0x543E0003, // 001E LDINT R15 4
0x7C300600, // 001F CALL R12 3
0x60300013, // 0020 GETGBL R12 G19
0x7C300000, // 0021 CALL R12 0
0xB8360800, // 0022 GETNGBL R13 K4
0x8C341B05, // 0023 GETMET R13 R13 K5
0x8C3C0906, // 0024 GETMET R15 R4 K6
0x58440008, // 0025 LDCONST R17 K8
0x5C480A00, // 0026 MOVE R18 R5
0x5C4C0E00, // 0027 MOVE R19 R7
0x5C501200, // 0028 MOVE R20 R9
0x7C3C0A00, // 0029 CALL R15 5
0x54420003, // 002A LDINT R16 4
0x7C340600, // 002B CALL R13 3
0x60340010, // 002C GETGBL R13 G16
0x88380109, // 002D GETMBR R14 R0 K9
0x7C340200, // 002E CALL R13 1
0xA8020078, // 002F EXBLK 0 #00A9
0x5C381A00, // 0030 MOVE R14 R13
0x7C380000, // 0031 CALL R14 0
0x8C3C1D0A, // 0032 GETMET R15 R14 K10
0x7C3C0200, // 0033 CALL R15 1
0x4C400000, // 0034 LDNIL R16
0x20400A10, // 0035 NE R16 R5 R16
0x78420002, // 0036 JMPF R16 #003A
0x20401E05, // 0037 NE R16 R15 R5
0x78420000, // 0038 JMPF R16 #003A
0x7001FFF5, // 0039 JMP #0030
0x8C40190B, // 003A GETMET R16 R12 K11
0x5C481E00, // 003B MOVE R18 R15
0x7C400400, // 003C CALL R16 2
0x74420002, // 003D JMPT R16 #0041
0x60400013, // 003E GETGBL R16 G19
0x7C400000, // 003F CALL R16 0
0x98301E10, // 0040 SETIDX R12 R15 R16
0x50180200, // 0041 LDBOOL R6 1 0
0x8C401D0C, // 0042 GETMET R16 R14 K12
0x5C481E00, // 0043 MOVE R18 R15
0x7C400400, // 0044 CALL R16 2
0xB8460800, // 0045 GETNGBL R17 K4
0x8C442305, // 0046 GETMET R17 R17 K5
0x8C4C0906, // 0047 GETMET R19 R4 K6
0x5854000D, // 0048 LDCONST R21 K13
0x60580008, // 0049 GETGBL R22 G8
0x5C5C1C00, // 004A MOVE R23 R14
0x7C580200, // 004B CALL R22 1
0x605C0008, // 004C GETGBL R23 G8
0x5C601E00, // 004D MOVE R24 R15
0x7C5C0200, // 004E CALL R23 1
0x60600008, // 004F GETGBL R24 G8
0x5C642000, // 0050 MOVE R25 R16
0x7C600200, // 0051 CALL R24 1
0x7C4C0A00, // 0052 CALL R19 5
0x54520003, // 0053 LDINT R20 4
0x7C440600, // 0054 CALL R17 3
0x60440010, // 0055 GETGBL R17 G16
0x5C482000, // 0056 MOVE R18 R16
0x7C440200, // 0057 CALL R17 1
0xA802004B, // 0058 EXBLK 0 #00A5
0x5C482200, // 0059 MOVE R18 R17
0x7C480000, // 005A CALL R18 0
0x4C4C0000, // 005B LDNIL R19
0x204C0E13, // 005C NE R19 R7 R19
0x784E0002, // 005D JMPF R19 #0061
0x204C2407, // 005E NE R19 R18 R7
0x784E0000, // 005F JMPF R19 #0061
0x7001FFF7, // 0060 JMP #0059
0x944C180F, // 0061 GETIDX R19 R12 R15
0x8C4C270B, // 0062 GETMET R19 R19 K11
0x5C542400, // 0063 MOVE R21 R18
0x7C4C0400, // 0064 CALL R19 2
0x744E0003, // 0065 JMPT R19 #006A
0x944C180F, // 0066 GETIDX R19 R12 R15
0x60500013, // 0067 GETGBL R20 G19
0x7C500000, // 0068 CALL R20 0
0x984C2414, // 0069 SETIDX R19 R18 R20
0x50200200, // 006A LDBOOL R8 1 0
0x8C4C1D0E, // 006B GETMET R19 R14 K14
0x5C541E00, // 006C MOVE R21 R15
0x5C582400, // 006D MOVE R22 R18
0x7C4C0600, // 006E CALL R19 3
0xB8520800, // 006F GETNGBL R20 K4
0x8C502905, // 0070 GETMET R20 R20 K5
0x8C580906, // 0071 GETMET R22 R4 K6
0x5860000F, // 0072 LDCONST R24 K15
0x60640008, // 0073 GETGBL R25 G8
0x5C681C00, // 0074 MOVE R26 R14
0x7C640200, // 0075 CALL R25 1
0x60680008, // 0076 GETGBL R26 G8
0x5C6C1E00, // 0077 MOVE R27 R15
0x7C680200, // 0078 CALL R26 1
0x606C0008, // 0079 GETGBL R27 G8
0x5C702400, // 007A MOVE R28 R18
0x7C6C0200, // 007B CALL R27 1
0x60700008, // 007C GETGBL R28 G8
0x5C742600, // 007D MOVE R29 R19
0x7C700200, // 007E CALL R28 1
0x7C580C00, // 007F CALL R22 6
0x545E0003, // 0080 LDINT R23 4
0x7C500600, // 0081 CALL R20 3
0x60500010, // 0082 GETGBL R20 G16
0x5C542600, // 0083 MOVE R21 R19
0x7C500200, // 0084 CALL R20 1
0xA802001A, // 0085 EXBLK 0 #00A1
0x5C542800, // 0086 MOVE R21 R20
0x7C540000, // 0087 CALL R21 0
0x4C580000, // 0088 LDNIL R22
0x20581216, // 0089 NE R22 R9 R22
0x785A0002, // 008A JMPF R22 #008E
0x20582A09, // 008B NE R22 R21 R9
0x785A0000, // 008C JMPF R22 #008E
0x7001FFF7, // 008D JMP #0086
0x9458180F, // 008E GETIDX R22 R12 R15
0x94582C12, // 008F GETIDX R22 R22 R18
0x8C582D0B, // 0090 GETMET R22 R22 K11
0x5C602A00, // 0091 MOVE R24 R21
0x7C580400, // 0092 CALL R22 2
0x745A0004, // 0093 JMPT R22 #0099
0x9458180F, // 0094 GETIDX R22 R12 R15
0x94582C12, // 0095 GETIDX R22 R22 R18
0x605C0012, // 0096 GETGBL R23 G18
0x7C5C0000, // 0097 CALL R23 0
0x98582A17, // 0098 SETIDX R22 R21 R23
0x50280200, // 0099 LDBOOL R10 1 0
0x9458180F, // 009A GETIDX R22 R12 R15
0x94582C12, // 009B GETIDX R22 R22 R18
0x94582C15, // 009C GETIDX R22 R22 R21
0x8C582D10, // 009D GETMET R22 R22 K16
0x5C601C00, // 009E MOVE R24 R14
0x7C580400, // 009F CALL R22 2
0x7001FFE4, // 00A0 JMP #0086
0x58500011, // 00A1 LDCONST R20 K17
0xAC500200, // 00A2 CATCH R20 1 0
0xB0080000, // 00A3 RAISE 2 R0 R0
0x7001FFB3, // 00A4 JMP #0059
0x58440011, // 00A5 LDCONST R17 K17
0xAC440200, // 00A6 CATCH R17 1 0
0xB0080000, // 00A7 RAISE 2 R0 R0
0x7001FF86, // 00A8 JMP #0030
0x58340011, // 00A9 LDCONST R13 K17
0xAC340200, // 00AA CATCH R13 1 0
0xB0080000, // 00AB RAISE 2 R0 R0
0x60340010, // 00AC GETGBL R13 G16
0x5C380600, // 00AD MOVE R14 R3
0x5C3C1800, // 00AE MOVE R15 R12
0x7C380200, // 00AF CALL R14 1
0x7C340200, // 00B0 CALL R13 1
0xA802003D, // 00B1 EXBLK 0 #00F0
0x5C381A00, // 00B2 MOVE R14 R13
0x7C380000, // 00B3 CALL R14 0
0x603C0010, // 00B4 GETGBL R15 G16
0x5C400600, // 00B5 MOVE R16 R3
0x9444180E, // 00B6 GETIDX R17 R12 R14
0x7C400200, // 00B7 CALL R16 1
0x7C3C0200, // 00B8 CALL R15 1
0xA8020031, // 00B9 EXBLK 0 #00EC
0x5C401E00, // 00BA MOVE R16 R15
0x7C400000, // 00BB CALL R16 0
0x60440010, // 00BC GETGBL R17 G16
0x5C480600, // 00BD MOVE R18 R3
0x944C180E, // 00BE GETIDX R19 R12 R14
0x944C2610, // 00BF GETIDX R19 R19 R16
0x7C480200, // 00C0 CALL R18 1
0x7C440200, // 00C1 CALL R17 1
0xA8020024, // 00C2 EXBLK 0 #00E8
0x5C482200, // 00C3 MOVE R18 R17
0x7C480000, // 00C4 CALL R18 0
0x604C0010, // 00C5 GETGBL R19 G16
0x9450180E, // 00C6 GETIDX R20 R12 R14
0x94502810, // 00C7 GETIDX R20 R20 R16
0x94502812, // 00C8 GETIDX R20 R20 R18
0x7C4C0200, // 00C9 CALL R19 1
0xA8020018, // 00CA EXBLK 0 #00E4
0x5C502600, // 00CB MOVE R20 R19
0x7C500000, // 00CC CALL R20 0
0xB8560800, // 00CD GETNGBL R21 K4
0x8C542B05, // 00CE GETMET R21 R21 K5
0x8C5C0906, // 00CF GETMET R23 R4 K6
0x58640012, // 00D0 LDCONST R25 K18
0x5C681C00, // 00D1 MOVE R26 R14
0x5C6C2000, // 00D2 MOVE R27 R16
0x5C702400, // 00D3 MOVE R28 R18
0x7C5C0A00, // 00D4 CALL R23 5
0x58600013, // 00D5 LDCONST R24 K19
0x7C540600, // 00D6 CALL R21 3
0x9006020E, // 00D7 SETMBR R1 K1 R14
0x90060410, // 00D8 SETMBR R1 K2 R16
0x90060612, // 00D9 SETMBR R1 K3 R18
0x5C540400, // 00DA MOVE R21 R2
0x5C582800, // 00DB MOVE R22 R20
0x5C5C0200, // 00DC MOVE R23 R1
0x5C601600, // 00DD MOVE R24 R11
0x7C540600, // 00DE CALL R21 3
0x782E0002, // 00DF JMPF R11 #00E3
0x78560001, // 00E0 JMPF R21 #00E3
0xA8040004, // 00E1 EXBLK 1 4
0x80002C00, // 00E2 RET 0
0x7001FFE6, // 00E3 JMP #00CB
0x584C0011, // 00E4 LDCONST R19 K17
0xAC4C0200, // 00E5 CATCH R19 1 0
0xB0080000, // 00E6 RAISE 2 R0 R0
0x7001FFDA, // 00E7 JMP #00C3
0x58440011, // 00E8 LDCONST R17 K17
0xAC440200, // 00E9 CATCH R17 1 0
0xB0080000, // 00EA RAISE 2 R0 R0
0x7001FFCD, // 00EB JMP #00BA
0x583C0011, // 00EC LDCONST R15 K17
0xAC3C0200, // 00ED CATCH R15 1 0
0xB0080000, // 00EE RAISE 2 R0 R0
0x7001FFC1, // 00EF JMP #00B2
0x58340011, // 00F0 LDCONST R13 K17
0xAC340200, // 00F1 CATCH R13 1 0
0xB0080000, // 00F2 RAISE 2 R0 R0
0x782E0019, // 00F3 JMPF R11 #010E
0x5C340C00, // 00F4 MOVE R13 R6
0x74360003, // 00F5 JMPT R13 #00FA
0xB8362A00, // 00F6 GETNGBL R13 K21
0x88341B16, // 00F7 GETMBR R13 R13 K22
0x9006280D, // 00F8 SETMBR R1 K20 R13
0x7002000E, // 00F9 JMP #0109
0x5C341000, // 00FA MOVE R13 R8
0x74360003, // 00FB JMPT R13 #0100
0xB8362A00, // 00FC GETNGBL R13 K21
0x88341B17, // 00FD GETMBR R13 R13 K23
0x9006280D, // 00FE SETMBR R1 K20 R13
0x70020008, // 00FF JMP #0109
0x5C341400, // 0100 MOVE R13 R10
0x74360003, // 0101 JMPT R13 #0106
0xB8362A00, // 0102 GETNGBL R13 K21
0x88341B18, // 0103 GETMBR R13 R13 K24
0x9006280D, // 0104 SETMBR R1 K20 R13
0x70020002, // 0105 JMP #0109
0xB8362A00, // 0106 GETNGBL R13 K21
0x88341B19, // 0107 GETMBR R13 R13 K25
0x9006280D, // 0108 SETMBR R1 K20 R13
0x5C340400, // 0109 MOVE R13 R2
0x4C380000, // 010A LDNIL R14
0x5C3C0200, // 010B MOVE R15 R1
0x50400200, // 010C LDBOOL R16 1 0
0x7C340600, // 010D CALL R13 3
0x80000000, // 010E RET 0
0x60300013, // 0016 GETGBL R12 G19
0x7C300000, // 0017 CALL R12 0
0x60340010, // 0018 GETGBL R13 G16
0x88380104, // 0019 GETMBR R14 R0 K4
0x7C340200, // 001A CALL R13 1
0xA8020055, // 001B EXBLK 0 #0072
0x5C381A00, // 001C MOVE R14 R13
0x7C380000, // 001D CALL R14 0
0x8C3C1D05, // 001E GETMET R15 R14 K5
0x7C3C0200, // 001F CALL R15 1
0x4C400000, // 0020 LDNIL R16
0x20400A10, // 0021 NE R16 R5 R16
0x78420002, // 0022 JMPF R16 #0026
0x20401E05, // 0023 NE R16 R15 R5
0x78420000, // 0024 JMPF R16 #0026
0x7001FFF5, // 0025 JMP #001C
0x8C401906, // 0026 GETMET R16 R12 K6
0x5C481E00, // 0027 MOVE R18 R15
0x7C400400, // 0028 CALL R16 2
0x74420002, // 0029 JMPT R16 #002D
0x60400013, // 002A GETGBL R16 G19
0x7C400000, // 002B CALL R16 0
0x98301E10, // 002C SETIDX R12 R15 R16
0x50180200, // 002D LDBOOL R6 1 0
0x8C401D07, // 002E GETMET R16 R14 K7
0x5C481E00, // 002F MOVE R18 R15
0x7C400400, // 0030 CALL R16 2
0x60440010, // 0031 GETGBL R17 G16
0x5C482000, // 0032 MOVE R18 R16
0x7C440200, // 0033 CALL R17 1
0xA8020038, // 0034 EXBLK 0 #006E
0x5C482200, // 0035 MOVE R18 R17
0x7C480000, // 0036 CALL R18 0
0x4C4C0000, // 0037 LDNIL R19
0x204C0E13, // 0038 NE R19 R7 R19
0x784E0002, // 0039 JMPF R19 #003D
0x204C2407, // 003A NE R19 R18 R7
0x784E0000, // 003B JMPF R19 #003D
0x7001FFF7, // 003C JMP #0035
0x944C180F, // 003D GETIDX R19 R12 R15
0x8C4C2706, // 003E GETMET R19 R19 K6
0x5C542400, // 003F MOVE R21 R18
0x7C4C0400, // 0040 CALL R19 2
0x744E0003, // 0041 JMPT R19 #0046
0x944C180F, // 0042 GETIDX R19 R12 R15
0x60500013, // 0043 GETGBL R20 G19
0x7C500000, // 0044 CALL R20 0
0x984C2414, // 0045 SETIDX R19 R18 R20
0x50200200, // 0046 LDBOOL R8 1 0
0x8C4C1D08, // 0047 GETMET R19 R14 K8
0x5C541E00, // 0048 MOVE R21 R15
0x5C582400, // 0049 MOVE R22 R18
0x7C4C0600, // 004A CALL R19 3
0x60500010, // 004B GETGBL R20 G16
0x5C542600, // 004C MOVE R21 R19
0x7C500200, // 004D CALL R20 1
0xA802001A, // 004E EXBLK 0 #006A
0x5C542800, // 004F MOVE R21 R20
0x7C540000, // 0050 CALL R21 0
0x4C580000, // 0051 LDNIL R22
0x20581216, // 0052 NE R22 R9 R22
0x785A0002, // 0053 JMPF R22 #0057
0x20582A09, // 0054 NE R22 R21 R9
0x785A0000, // 0055 JMPF R22 #0057
0x7001FFF7, // 0056 JMP #004F
0x9458180F, // 0057 GETIDX R22 R12 R15
0x94582C12, // 0058 GETIDX R22 R22 R18
0x8C582D06, // 0059 GETMET R22 R22 K6
0x5C602A00, // 005A MOVE R24 R21
0x7C580400, // 005B CALL R22 2
0x745A0004, // 005C JMPT R22 #0062
0x9458180F, // 005D GETIDX R22 R12 R15
0x94582C12, // 005E GETIDX R22 R22 R18
0x605C0012, // 005F GETGBL R23 G18
0x7C5C0000, // 0060 CALL R23 0
0x98582A17, // 0061 SETIDX R22 R21 R23
0x50280200, // 0062 LDBOOL R10 1 0
0x9458180F, // 0063 GETIDX R22 R12 R15
0x94582C12, // 0064 GETIDX R22 R22 R18
0x94582C15, // 0065 GETIDX R22 R22 R21
0x8C582D09, // 0066 GETMET R22 R22 K9
0x5C601C00, // 0067 MOVE R24 R14
0x7C580400, // 0068 CALL R22 2
0x7001FFE4, // 0069 JMP #004F
0x5850000A, // 006A LDCONST R20 K10
0xAC500200, // 006B CATCH R20 1 0
0xB0080000, // 006C RAISE 2 R0 R0
0x7001FFC6, // 006D JMP #0035
0x5844000A, // 006E LDCONST R17 K10
0xAC440200, // 006F CATCH R17 1 0
0xB0080000, // 0070 RAISE 2 R0 R0
0x7001FFA9, // 0071 JMP #001C
0x5834000A, // 0072 LDCONST R13 K10
0xAC340200, // 0073 CATCH R13 1 0
0xB0080000, // 0074 RAISE 2 R0 R0
0x60340010, // 0075 GETGBL R13 G16
0x5C380600, // 0076 MOVE R14 R3
0x5C3C1800, // 0077 MOVE R15 R12
0x7C380200, // 0078 CALL R14 1
0x7C340200, // 0079 CALL R13 1
0xA802003D, // 007A EXBLK 0 #00B9
0x5C381A00, // 007B MOVE R14 R13
0x7C380000, // 007C CALL R14 0
0x603C0010, // 007D GETGBL R15 G16
0x5C400600, // 007E MOVE R16 R3
0x9444180E, // 007F GETIDX R17 R12 R14
0x7C400200, // 0080 CALL R16 1
0x7C3C0200, // 0081 CALL R15 1
0xA8020031, // 0082 EXBLK 0 #00B5
0x5C401E00, // 0083 MOVE R16 R15
0x7C400000, // 0084 CALL R16 0
0x60440010, // 0085 GETGBL R17 G16
0x5C480600, // 0086 MOVE R18 R3
0x944C180E, // 0087 GETIDX R19 R12 R14
0x944C2610, // 0088 GETIDX R19 R19 R16
0x7C480200, // 0089 CALL R18 1
0x7C440200, // 008A CALL R17 1
0xA8020024, // 008B EXBLK 0 #00B1
0x5C482200, // 008C MOVE R18 R17
0x7C480000, // 008D CALL R18 0
0x604C0010, // 008E GETGBL R19 G16
0x9450180E, // 008F GETIDX R20 R12 R14
0x94502810, // 0090 GETIDX R20 R20 R16
0x94502812, // 0091 GETIDX R20 R20 R18
0x7C4C0200, // 0092 CALL R19 1
0xA8020018, // 0093 EXBLK 0 #00AD
0x5C502600, // 0094 MOVE R20 R19
0x7C500000, // 0095 CALL R20 0
0xB8561600, // 0096 GETNGBL R21 K11
0x8C542B0C, // 0097 GETMET R21 R21 K12
0x8C5C090D, // 0098 GETMET R23 R4 K13
0x5864000E, // 0099 LDCONST R25 K14
0x5C681C00, // 009A MOVE R26 R14
0x5C6C2000, // 009B MOVE R27 R16
0x5C702400, // 009C MOVE R28 R18
0x7C5C0A00, // 009D CALL R23 5
0x5860000F, // 009E LDCONST R24 K15
0x7C540600, // 009F CALL R21 3
0x9006020E, // 00A0 SETMBR R1 K1 R14
0x90060410, // 00A1 SETMBR R1 K2 R16
0x90060612, // 00A2 SETMBR R1 K3 R18
0x5C540400, // 00A3 MOVE R21 R2
0x5C582800, // 00A4 MOVE R22 R20
0x5C5C0200, // 00A5 MOVE R23 R1
0x5C601600, // 00A6 MOVE R24 R11
0x7C540600, // 00A7 CALL R21 3
0x782E0002, // 00A8 JMPF R11 #00AC
0x78560001, // 00A9 JMPF R21 #00AC
0xA8040004, // 00AA EXBLK 1 4
0x80002C00, // 00AB RET 0
0x7001FFE6, // 00AC JMP #0094
0x584C000A, // 00AD LDCONST R19 K10
0xAC4C0200, // 00AE CATCH R19 1 0
0xB0080000, // 00AF RAISE 2 R0 R0
0x7001FFDA, // 00B0 JMP #008C
0x5844000A, // 00B1 LDCONST R17 K10
0xAC440200, // 00B2 CATCH R17 1 0
0xB0080000, // 00B3 RAISE 2 R0 R0
0x7001FFCD, // 00B4 JMP #0083
0x583C000A, // 00B5 LDCONST R15 K10
0xAC3C0200, // 00B6 CATCH R15 1 0
0xB0080000, // 00B7 RAISE 2 R0 R0
0x7001FFC1, // 00B8 JMP #007B
0x5834000A, // 00B9 LDCONST R13 K10
0xAC340200, // 00BA CATCH R13 1 0
0xB0080000, // 00BB RAISE 2 R0 R0
0x782E0019, // 00BC JMPF R11 #00D7
0x5C340C00, // 00BD MOVE R13 R6
0x74360003, // 00BE JMPT R13 #00C3
0xB8362200, // 00BF GETNGBL R13 K17
0x88341B12, // 00C0 GETMBR R13 R13 K18
0x9006200D, // 00C1 SETMBR R1 K16 R13
0x7002000E, // 00C2 JMP #00D2
0x5C341000, // 00C3 MOVE R13 R8
0x74360003, // 00C4 JMPT R13 #00C9
0xB8362200, // 00C5 GETNGBL R13 K17
0x88341B13, // 00C6 GETMBR R13 R13 K19
0x9006200D, // 00C7 SETMBR R1 K16 R13
0x70020008, // 00C8 JMP #00D2
0x5C341400, // 00C9 MOVE R13 R10
0x74360003, // 00CA JMPT R13 #00CF
0xB8362200, // 00CB GETNGBL R13 K17
0x88341B14, // 00CC GETMBR R13 R13 K20
0x9006200D, // 00CD SETMBR R1 K16 R13
0x70020002, // 00CE JMP #00D2
0xB8362200, // 00CF GETNGBL R13 K17
0x88341B15, // 00D0 GETMBR R13 R13 K21
0x9006200D, // 00D1 SETMBR R1 K16 R13
0x5C340400, // 00D2 MOVE R13 R2
0x4C380000, // 00D3 LDNIL R14
0x5C3C0200, // 00D4 MOVE R15 R1
0x50400200, // 00D5 LDBOOL R16 1 0
0x7C340600, // 00D6 CALL R13 3
0x80000000, // 00D7 RET 0
})
)
);

File diff suppressed because it is too large Load Diff

View File

@ -331,25 +331,25 @@ be_local_closure(Matter_Frame_debug, /* name */
be_str_weak(debug),
&be_const_str_solidified,
( &(const binstruction[19]) { /* code */
0xB80A0000, // 0000 GETNGBL R2 K0
0x8C080501, // 0001 GETMET R2 R2 K1
0x88100102, // 0002 GETMBR R4 R0 K2
0x5C140200, // 0003 MOVE R5 R1
0x7C080600, // 0004 CALL R2 3
0x8C0C0503, // 0005 GETMET R3 R2 K3
0x7C0C0200, // 0006 CALL R3 1
0x8C0C0504, // 0007 GETMET R3 R2 K4
0x7C0C0200, // 0008 CALL R3 1
0xB80E0A00, // 0009 GETNGBL R3 K5
0x8C0C0706, // 000A GETMET R3 R3 K6
0xB8160000, // 000B GETNGBL R5 K0
0x8C140B08, // 000C GETMET R5 R5 K8
0x5C1C0400, // 000D MOVE R7 R2
0x7C140400, // 000E CALL R5 2
0x00160E05, // 000F ADD R5 K7 R5
0x541A0003, // 0010 LDINT R6 4
0x7C0C0600, // 0011 CALL R3 3
0x80000000, // 0012 RET 0
0x80000400, // 0000 RET 0
0xB80A0000, // 0001 GETNGBL R2 K0
0x8C080501, // 0002 GETMET R2 R2 K1
0x88100102, // 0003 GETMBR R4 R0 K2
0x5C140200, // 0004 MOVE R5 R1
0x7C080600, // 0005 CALL R2 3
0x8C0C0503, // 0006 GETMET R3 R2 K3
0x7C0C0200, // 0007 CALL R3 1
0x8C0C0504, // 0008 GETMET R3 R2 K4
0x7C0C0200, // 0009 CALL R3 1
0xB80E0A00, // 000A GETNGBL R3 K5
0x8C0C0706, // 000B GETMET R3 R3 K6
0xB8160000, // 000C GETNGBL R5 K0
0x8C140B08, // 000D GETMET R5 R5 K8
0x5C1C0400, // 000E MOVE R7 R2
0x7C140400, // 000F CALL R5 2
0x00160E05, // 0010 ADD R5 K7 R5
0x541A0003, // 0011 LDINT R6 4
0x7C0C0600, // 0012 CALL R3 3
})
)
);
@ -1039,7 +1039,7 @@ be_local_closure(Matter_Frame_decrypt, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[37]) { /* constants */
( &(const bvalue[28]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(session),
/* K2 */ be_nested_str_weak(raw),
@ -1065,22 +1065,13 @@ be_local_closure(Matter_Frame_decrypt, /* name */
/* K22 */ be_nested_str_weak(source_node_id),
/* K23 */ be_nested_str_weak(peer_node_id),
/* K24 */ be_nested_str_weak(resize),
/* K25 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
/* K26 */ be_nested_str_weak(MTR_X3A_X20i2r_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
/* K27 */ be_nested_str_weak(tohex),
/* K28 */ be_nested_str_weak(MTR_X3A_X20p_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
/* K29 */ be_nested_str_weak(MTR_X3A_X20a_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
/* K30 */ be_nested_str_weak(MTR_X3A_X20n_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
/* K31 */ be_nested_str_weak(MTR_X3A_X20mic_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
/* K32 */ be_nested_str_weak(AES_CCM),
/* K33 */ be_nested_str_weak(tag),
/* K34 */ be_nested_str_weak(MTR_X3A_X20cleartext_X20_X20_X20_X3D),
/* K35 */ be_nested_str_weak(MTR_X3A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
/* K36 */ be_nested_str_weak(MTR_X3A_X20rejected_X20packet_X20due_X20to_X20invalid_X20MIC),
/* K25 */ be_nested_str_weak(AES_CCM),
/* K26 */ be_nested_str_weak(tag),
/* K27 */ be_nested_str_weak(MTR_X3A_X20rejected_X20packet_X20due_X20to_X20invalid_X20MIC),
}),
be_str_weak(decrypt),
&be_const_str_solidified,
( &(const binstruction[170]) { /* code */
( &(const binstruction[106]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x88080101, // 0001 GETMBR R2 R0 K1
0x880C0102, // 0002 GETMBR R3 R0 K2
@ -1163,94 +1154,30 @@ be_local_closure(Matter_Frame_decrypt, /* name */
0x8C241118, // 004F GETMET R9 R8 K24
0x542E000C, // 0050 LDINT R11 13
0x7C240400, // 0051 CALL R9 2
0xB8260C00, // 0052 GETNGBL R9 K6
0x8C241307, // 0053 GETMET R9 R9 K7
0x582C0019, // 0054 LDCONST R11 K25
0x54320003, // 0055 LDINT R12 4
0x7C240600, // 0056 CALL R9 3
0xB8260C00, // 0057 GETNGBL R9 K6
0x8C241307, // 0058 GETMET R9 R9 K7
0x8C2C0B1B, // 0059 GETMET R11 R5 K27
0x7C2C0200, // 005A CALL R11 1
0x002E340B, // 005B ADD R11 K26 R11
0x54320003, // 005C LDINT R12 4
0x7C240600, // 005D CALL R9 3
0xB8260C00, // 005E GETNGBL R9 K6
0x8C241307, // 005F GETMET R9 R9 K7
0x8C2C0F1B, // 0060 GETMET R11 R7 K27
0x7C2C0200, // 0061 CALL R11 1
0x002E380B, // 0062 ADD R11 K28 R11
0x54320003, // 0063 LDINT R12 4
0x7C240600, // 0064 CALL R9 3
0xB8260C00, // 0065 GETNGBL R9 K6
0x8C241307, // 0066 GETMET R9 R9 K7
0x8C2C0D1B, // 0067 GETMET R11 R6 K27
0x7C2C0200, // 0068 CALL R11 1
0x002E3A0B, // 0069 ADD R11 K29 R11
0x54320003, // 006A LDINT R12 4
0x7C240600, // 006B CALL R9 3
0xB8260C00, // 006C GETNGBL R9 K6
0x8C241307, // 006D GETMET R9 R9 K7
0x8C2C111B, // 006E GETMET R11 R8 K27
0x7C2C0200, // 006F CALL R11 1
0x002E3C0B, // 0070 ADD R11 K30 R11
0x54320003, // 0071 LDINT R12 4
0x7C240600, // 0072 CALL R9 3
0xB8260C00, // 0073 GETNGBL R9 K6
0x8C241307, // 0074 GETMET R9 R9 K7
0x8C2C091B, // 0075 GETMET R11 R4 K27
0x7C2C0200, // 0076 CALL R11 1
0x002E3E0B, // 0077 ADD R11 K31 R11
0x54320003, // 0078 LDINT R12 4
0x7C240600, // 0079 CALL R9 3
0x8C240320, // 007A GETMET R9 R1 K32
0x5C2C0A00, // 007B MOVE R11 R5
0x5C301000, // 007C MOVE R12 R8
0x5C340C00, // 007D MOVE R13 R6
0x6038000C, // 007E GETGBL R14 G12
0x5C3C0E00, // 007F MOVE R15 R7
0x7C380200, // 0080 CALL R14 1
0x543E000F, // 0081 LDINT R15 16
0x7C240C00, // 0082 CALL R9 6
0x8C281310, // 0083 GETMET R10 R9 K16
0x5C300E00, // 0084 MOVE R12 R7
0x7C280400, // 0085 CALL R10 2
0x8C2C1321, // 0086 GETMET R11 R9 K33
0x7C2C0200, // 0087 CALL R11 1
0xB8320C00, // 0088 GETNGBL R12 K6
0x8C301907, // 0089 GETMET R12 R12 K7
0x58380019, // 008A LDCONST R14 K25
0x543E0003, // 008B LDINT R15 4
0x7C300600, // 008C CALL R12 3
0xB8320C00, // 008D GETNGBL R12 K6
0x8C301907, // 008E GETMET R12 R12 K7
0x8C38151B, // 008F GETMET R14 R10 K27
0x7C380200, // 0090 CALL R14 1
0x003A440E, // 0091 ADD R14 K34 R14
0x543E0003, // 0092 LDINT R15 4
0x7C300600, // 0093 CALL R12 3
0xB8320C00, // 0094 GETNGBL R12 K6
0x8C301907, // 0095 GETMET R12 R12 K7
0x8C38171B, // 0096 GETMET R14 R11 K27
0x7C380200, // 0097 CALL R14 1
0x003A460E, // 0098 ADD R14 K35 R14
0x543E0003, // 0099 LDINT R15 4
0x7C300600, // 009A CALL R12 3
0xB8320C00, // 009B GETNGBL R12 K6
0x8C301907, // 009C GETMET R12 R12 K7
0x58380019, // 009D LDCONST R14 K25
0x543E0003, // 009E LDINT R15 4
0x7C300600, // 009F CALL R12 3
0x20301604, // 00A0 NE R12 R11 R4
0x78320006, // 00A1 JMPF R12 #00A9
0xB8320C00, // 00A2 GETNGBL R12 K6
0x8C301907, // 00A3 GETMET R12 R12 K7
0x58380024, // 00A4 LDCONST R14 K36
0x583C0009, // 00A5 LDCONST R15 K9
0x7C300600, // 00A6 CALL R12 3
0x4C300000, // 00A7 LDNIL R12
0x80041800, // 00A8 RET 1 R12
0x80041400, // 00A9 RET 1 R10
0x8C240319, // 0052 GETMET R9 R1 K25
0x5C2C0A00, // 0053 MOVE R11 R5
0x5C301000, // 0054 MOVE R12 R8
0x5C340C00, // 0055 MOVE R13 R6
0x6038000C, // 0056 GETGBL R14 G12
0x5C3C0E00, // 0057 MOVE R15 R7
0x7C380200, // 0058 CALL R14 1
0x543E000F, // 0059 LDINT R15 16
0x7C240C00, // 005A CALL R9 6
0x8C281310, // 005B GETMET R10 R9 K16
0x5C300E00, // 005C MOVE R12 R7
0x7C280400, // 005D CALL R10 2
0x8C2C131A, // 005E GETMET R11 R9 K26
0x7C2C0200, // 005F CALL R11 1
0x20301604, // 0060 NE R12 R11 R4
0x78320006, // 0061 JMPF R12 #0069
0xB8320C00, // 0062 GETNGBL R12 K6
0x8C301907, // 0063 GETMET R12 R12 K7
0x5838001B, // 0064 LDCONST R14 K27
0x583C0009, // 0065 LDCONST R15 K9
0x7C300600, // 0066 CALL R12 3
0x4C300000, // 0067 LDNIL R12
0x80041800, // 0068 RET 1 R12
0x80041400, // 0069 RET 1 R10
})
)
);

View File

@ -221,7 +221,7 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[75]) { /* constants */
( &(const bvalue[74]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(Frame),
@ -238,30 +238,30 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
/* K13 */ be_nested_str_weak(MTR_X3A_X20find_X20session_X20by_X20source_node_id_X20_X3D_X20),
/* K14 */ be_nested_str_weak(_X20session_id_X20_X3D_X20),
/* K15 */ be_nested_str_weak(local_session_id),
/* K16 */ be_const_int(2),
/* K17 */ be_nested_str_weak(control_message),
/* K18 */ be_nested_str_weak(process_incoming_control_message),
/* K19 */ be_const_int(0),
/* K20 */ be_nested_str_weak(sec_sesstype),
/* K21 */ be_const_int(3),
/* K22 */ be_nested_str_weak(_ip),
/* K23 */ be_nested_str_weak(_port),
/* K24 */ be_nested_str_weak(_message_handler),
/* K25 */ be_nested_str_weak(session),
/* K26 */ be_nested_str_weak(_counter_insecure_rcv),
/* K27 */ be_nested_str_weak(validate),
/* K28 */ be_nested_str_weak(message_counter),
/* K29 */ be_nested_str_weak(format),
/* K30 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Duplicate_X20unencrypted_X20message_X20_X3D_X20_X25i_X20ref_X20_X3D_X20_X25i),
/* K31 */ be_nested_str_weak(val),
/* K32 */ be_nested_str_weak(send_simple_ack),
/* K33 */ be_nested_str_weak(decode_payload),
/* K34 */ be_nested_str_weak(received_ack),
/* K35 */ be_nested_str_weak(opcode),
/* K36 */ be_nested_str_weak(get_opcode_name),
/* K37 */ be_nested_str_weak(0x_X2502X),
/* K38 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X28_X256i_X29_X20_X25s_X20rid_X3D_X25i_X20exch_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
/* K39 */ be_nested_str_weak(exchange_id),
/* K16 */ be_nested_str_weak(control_message),
/* K17 */ be_nested_str_weak(process_incoming_control_message),
/* K18 */ be_const_int(0),
/* K19 */ be_nested_str_weak(sec_sesstype),
/* K20 */ be_nested_str_weak(_ip),
/* K21 */ be_nested_str_weak(_port),
/* K22 */ be_nested_str_weak(_message_handler),
/* K23 */ be_nested_str_weak(session),
/* K24 */ be_nested_str_weak(_counter_insecure_rcv),
/* K25 */ be_nested_str_weak(validate),
/* K26 */ be_nested_str_weak(message_counter),
/* K27 */ be_nested_str_weak(format),
/* K28 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Duplicate_X20unencrypted_X20message_X20_X3D_X20_X25i_X20ref_X20_X3D_X20_X25i),
/* K29 */ be_nested_str_weak(val),
/* K30 */ be_const_int(3),
/* K31 */ be_nested_str_weak(send_simple_ack),
/* K32 */ be_nested_str_weak(decode_payload),
/* K33 */ be_nested_str_weak(received_ack),
/* K34 */ be_nested_str_weak(opcode),
/* K35 */ be_nested_str_weak(get_opcode_name),
/* K36 */ be_nested_str_weak(0x_X2502X),
/* K37 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X28_X256i_X29_X20_X25s_X20rid_X3D_X25i_X20exch_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
/* K38 */ be_nested_str_weak(exchange_id),
/* K39 */ be_const_int(2),
/* K40 */ be_nested_str_weak(MTR_X3A_X20_X3Ercv_X20Ack_X20_X20_X20_X28_X256i_X29_X20rid_X3D_X25i_X20exch_X3D_X25i_X20ack_X3D_X25s_X20_X25sfrom_X20_X5B_X25s_X5D_X3A_X25i),
/* K41 */ be_nested_str_weak(x_flag_r),
/* K42 */ be_nested_str_weak(_X7Breliable_X7D_X20),
@ -288,22 +288,21 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
/* K63 */ be_nested_str_weak(_X20opcode_X3D),
/* K64 */ be_nested_str_weak(_X20exchange_id_X3D),
/* K65 */ be_nested_str_weak(MTR_X3A_X20_X3Ercv_X20_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20_X5B_X2502X_X2F_X2502X_X5D_X20rid_X3D_X25i_X20exch_X3D_X25i_X20ack_X3D_X25s_X20_X25sfrom_X20_X5B_X25s_X5D_X3A_X25i),
/* K66 */ be_nested_str_weak(MTR_X3A_X20PROTOCOL_ID_SECURE_CHANNEL_X20),
/* K67 */ be_nested_str_weak(im),
/* K68 */ be_nested_str_weak(process_incoming_ack),
/* K69 */ be_nested_str_weak(send_enqueued),
/* K70 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
/* K71 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
/* K72 */ be_nested_str_weak(_X3B),
/* K73 */ be_nested_str_weak(debug),
/* K74 */ be_nested_str_weak(traceback),
/* K66 */ be_nested_str_weak(im),
/* K67 */ be_nested_str_weak(process_incoming_ack),
/* K68 */ be_nested_str_weak(send_enqueued),
/* K69 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
/* K70 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
/* K71 */ be_nested_str_weak(_X3B),
/* K72 */ be_nested_str_weak(debug),
/* K73 */ be_nested_str_weak(traceback),
}),
be_str_weak(msg_received),
&be_const_str_solidified,
( &(const binstruction[396]) { /* code */
( &(const binstruction[388]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0x50140000, // 0001 LDBOOL R5 0 0
0xA8020172, // 0002 EXBLK 0 #0176
0xA802016A, // 0002 EXBLK 0 #016E
0xB81A0200, // 0003 GETNGBL R6 K1
0x8C180D02, // 0004 GETMET R6 R6 K2
0x5C200000, // 0005 MOVE R8 R0
@ -319,7 +318,7 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0xA8040001, // 000F EXBLK 1 1
0x80041000, // 0010 RET 1 R8
0x88200D04, // 0011 GETMBR R8 R6 K4
0x78220021, // 0012 JMPF R8 #0035
0x78220022, // 0012 JMPF R8 #0036
0xB8220A00, // 0013 GETNGBL R8 K5
0x8C201106, // 0014 GETMET R8 R8 K6
0xB82A0200, // 0015 GETNGBL R10 K1
@ -327,376 +326,368 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x5C300C00, // 0017 MOVE R12 R6
0x7C280400, // 0018 CALL R10 2
0x002A0E0A, // 0019 ADD R10 K7 R10
0x7C200400, // 001A CALL R8 2
0x88200109, // 001B GETMBR R8 R0 K9
0x8820110A, // 001C GETMBR R8 R8 K10
0x8C20110B, // 001D GETMET R8 R8 K11
0x88280D0C, // 001E GETMBR R10 R6 K12
0x542E0059, // 001F LDINT R11 90
0x7C200600, // 0020 CALL R8 3
0xB8260A00, // 0021 GETNGBL R9 K5
0x8C241306, // 0022 GETMET R9 R9 K6
0x602C0008, // 0023 GETGBL R11 G8
0x88300D0C, // 0024 GETMBR R12 R6 K12
0x7C2C0200, // 0025 CALL R11 1
0x002E1A0B, // 0026 ADD R11 K13 R11
0x002C170E, // 0027 ADD R11 R11 K14
0x60300008, // 0028 GETGBL R12 G8
0x8834110F, // 0029 GETMBR R13 R8 K15
0x7C300200, // 002A CALL R12 1
0x002C160C, // 002B ADD R11 R11 R12
0x58300010, // 002C LDCONST R12 K16
0x7C240600, // 002D CALL R9 3
0x88240111, // 002E GETMBR R9 R0 K17
0x8C241312, // 002F GETMET R9 R9 K18
0x5C2C0C00, // 0030 MOVE R11 R6
0x7C240400, // 0031 CALL R9 2
0xA8040001, // 0032 EXBLK 1 1
0x80041200, // 0033 RET 1 R9
0x7002013C, // 0034 JMP #0172
0x88200D0F, // 0035 GETMBR R8 R6 K15
0x1C201113, // 0036 EQ R8 R8 K19
0x7822007D, // 0037 JMPF R8 #00B6
0x88200D14, // 0038 GETMBR R8 R6 K20
0x1C201113, // 0039 EQ R8 R8 K19
0x7822007A, // 003A JMPF R8 #00B6
0x88200109, // 003B GETMBR R8 R0 K9
0x8820110A, // 003C GETMBR R8 R8 K10
0x8C20110B, // 003D GETMET R8 R8 K11
0x88280D0C, // 003E GETMBR R10 R6 K12
0x542E0059, // 003F LDINT R11 90
0x7C200600, // 0040 CALL R8 3
0xB8260A00, // 0041 GETNGBL R9 K5
0x8C241306, // 0042 GETMET R9 R9 K6
0x602C0008, // 0043 GETGBL R11 G8
0x88300D0C, // 0044 GETMBR R12 R6 K12
0x7C2C0200, // 0045 CALL R11 1
0x002E1A0B, // 0046 ADD R11 K13 R11
0x002C170E, // 0047 ADD R11 R11 K14
0x60300008, // 0048 GETGBL R12 G8
0x8834110F, // 0049 GETMBR R13 R8 K15
0x7C300200, // 004A CALL R12 1
0x002C160C, // 004B ADD R11 R11 R12
0x58300015, // 004C LDCONST R12 K21
0x7C240600, // 004D CALL R9 3
0x780A0000, // 004E JMPF R2 #0050
0x90222C02, // 004F SETMBR R8 K22 R2
0x780E0000, // 0050 JMPF R3 #0052
0x90222E03, // 0051 SETMBR R8 K23 R3
0x90223000, // 0052 SETMBR R8 K24 R0
0x901A3208, // 0053 SETMBR R6 K25 R8
0x8824111A, // 0054 GETMBR R9 R8 K26
0x8C24131B, // 0055 GETMET R9 R9 K27
0x882C0D1C, // 0056 GETMBR R11 R6 K28
0x50300000, // 0057 LDBOOL R12 0 0
0x7C240600, // 0058 CALL R9 3
0x74260011, // 0059 JMPT R9 #006C
0xB8260A00, // 005A GETNGBL R9 K5
0x8C241306, // 005B GETMET R9 R9 K6
0x8C2C091D, // 005C GETMET R11 R4 K29
0x5834001E, // 005D LDCONST R13 K30
0x88380D1C, // 005E GETMBR R14 R6 K28
0x883C111A, // 005F GETMBR R15 R8 K26
0x8C3C1F1F, // 0060 GETMET R15 R15 K31
0x7C3C0200, // 0061 CALL R15 1
0x7C2C0800, // 0062 CALL R11 4
0x58300015, // 0063 LDCONST R12 K21
0x7C240600, // 0064 CALL R9 3
0x8C240120, // 0065 GETMET R9 R0 K32
0x5C2C0C00, // 0066 MOVE R11 R6
0x50300000, // 0067 LDBOOL R12 0 0
0x7C240600, // 0068 CALL R9 3
0x50240000, // 0069 LDBOOL R9 0 0
0xA8040001, // 006A EXBLK 1 1
0x80041200, // 006B RET 1 R9
0x8C240D21, // 006C GETMET R9 R6 K33
0x7C240200, // 006D CALL R9 1
0x74260002, // 006E JMPT R9 #0072
0x50240000, // 006F LDBOOL R9 0 0
0xA8040001, // 0070 EXBLK 1 1
0x80041200, // 0071 RET 1 R9
0x88240109, // 0072 GETMBR R9 R0 K9
0x8C241322, // 0073 GETMET R9 R9 K34
0x5C2C0C00, // 0074 MOVE R11 R6
0x7C240400, // 0075 CALL R9 2
0x88240D23, // 0076 GETMBR R9 R6 K35
0x542A000F, // 0077 LDINT R10 16
0x2024120A, // 0078 NE R9 R9 R10
0x78260018, // 0079 JMPF R9 #0093
0xB8260200, // 007A GETNGBL R9 K1
0x8C241324, // 007B GETMET R9 R9 K36
0x882C0D23, // 007C GETMBR R11 R6 K35
0x7C240400, // 007D CALL R9 2
0x5C281200, // 007E MOVE R10 R9
0x742A0004, // 007F JMPT R10 #0085
0x8C28091D, // 0080 GETMET R10 R4 K29
0x58300025, // 0081 LDCONST R12 K37
0x88340D23, // 0082 GETMBR R13 R6 K35
0x7C280600, // 0083 CALL R10 3
0x5C241400, // 0084 MOVE R9 R10
0xB82A0A00, // 0085 GETNGBL R10 K5
0x8C281506, // 0086 GETMET R10 R10 K6
0x8C30091D, // 0087 GETMET R12 R4 K29
0x58380026, // 0088 LDCONST R14 K38
0x883C110F, // 0089 GETMBR R15 R8 K15
0x5C401200, // 008A MOVE R16 R9
0x88440D1C, // 008B GETMBR R17 R6 K28
0x88480D27, // 008C GETMBR R18 R6 K39
0x5C4C0400, // 008D MOVE R19 R2
0x5C500600, // 008E MOVE R20 R3
0x7C301000, // 008F CALL R12 8
0x58340010, // 0090 LDCONST R13 K16
0x7C280600, // 0091 CALL R10 3
0x70020013, // 0092 JMP #00A7
0xB8260A00, // 0093 GETNGBL R9 K5
0x8C241306, // 0094 GETMET R9 R9 K6
0x8C2C091D, // 0095 GETMET R11 R4 K29
0x58340028, // 0096 LDCONST R13 K40
0x8838110F, // 0097 GETMBR R14 R8 K15
0x883C0D1C, // 0098 GETMBR R15 R6 K28
0x88400D29, // 0099 GETMBR R16 R6 K41
0x78420001, // 009A JMPF R16 #009D
0x5840002A, // 009B LDCONST R16 K42
0x70020000, // 009C JMP #009E
0x5840002B, // 009D LDCONST R16 K43
0x88440D27, // 009E GETMBR R17 R6 K39
0x60480008, // 009F GETGBL R18 G8
0x884C0D2C, // 00A0 GETMBR R19 R6 K44
0x7C480200, // 00A1 CALL R18 1
0x5C4C0400, // 00A2 MOVE R19 R2
0x5C500600, // 00A3 MOVE R20 R3
0x7C2C1200, // 00A4 CALL R11 9
0x58300015, // 00A5 LDCONST R12 K21
0x7C240600, // 00A6 CALL R9 3
0x8824012D, // 00A7 GETMBR R9 R0 K45
0x8C24132E, // 00A8 GETMET R9 R9 K46
0x5C2C0C00, // 00A9 MOVE R11 R6
0x7C240400, // 00AA CALL R9 2
0x5C141200, // 00AB MOVE R5 R9
0x5C240A00, // 00AC MOVE R9 R5
0x74260003, // 00AD JMPT R9 #00B2
0x8C240120, // 00AE GETMET R9 R0 K32
0x5C2C0C00, // 00AF MOVE R11 R6
0x50300000, // 00B0 LDBOOL R12 0 0
0x7C240600, // 00B1 CALL R9 3
0x50240200, // 00B2 LDBOOL R9 1 0
0xA8040001, // 00B3 EXBLK 1 1
0x80041200, // 00B4 RET 1 R9
0x700200BB, // 00B5 JMP #0172
0xB8220A00, // 00B6 GETNGBL R8 K5
0x8C201106, // 00B7 GETMET R8 R8 K6
0x8C28091D, // 00B8 GETMET R10 R4 K29
0x5830002F, // 00B9 LDCONST R12 K47
0x88340D0F, // 00BA GETMBR R13 R6 K15
0x88380D1C, // 00BB GETMBR R14 R6 K28
0x7C280800, // 00BC CALL R10 4
0x582C0015, // 00BD LDCONST R11 K21
0x7C200600, // 00BE CALL R8 3
0x88200109, // 00BF GETMBR R8 R0 K9
0x8820110A, // 00C0 GETMBR R8 R8 K10
0x8C201130, // 00C1 GETMET R8 R8 K48
0x88280D0F, // 00C2 GETMBR R10 R6 K15
0x7C200400, // 00C3 CALL R8 2
0x4C240000, // 00C4 LDNIL R9
0x1C241009, // 00C5 EQ R9 R8 R9
0x7826000A, // 00C6 JMPF R9 #00D2
0xB8260A00, // 00C7 GETNGBL R9 K5
0x8C241306, // 00C8 GETMET R9 R9 K6
0x602C0008, // 00C9 GETGBL R11 G8
0x88300D0F, // 00CA GETMBR R12 R6 K15
0x7C2C0200, // 00CB CALL R11 1
0x002E620B, // 00CC ADD R11 K49 R11
0x58300010, // 00CD LDCONST R12 K16
0x7C240600, // 00CE CALL R9 3
0x50240000, // 00CF LDBOOL R9 0 0
0xA8040001, // 00D0 EXBLK 1 1
0x80041200, // 00D1 RET 1 R9
0x780A0000, // 00D2 JMPF R2 #00D4
0x90222C02, // 00D3 SETMBR R8 K22 R2
0x780E0000, // 00D4 JMPF R3 #00D6
0x90222E03, // 00D5 SETMBR R8 K23 R3
0x90223000, // 00D6 SETMBR R8 K24 R0
0x901A3208, // 00D7 SETMBR R6 K25 R8
0x8C241132, // 00D8 GETMET R9 R8 K50
0x882C0D1C, // 00D9 GETMBR R11 R6 K28
0x50300200, // 00DA LDBOOL R12 1 0
0x7C240600, // 00DB CALL R9 3
0x74260013, // 00DC JMPT R9 #00F1
0xB8260A00, // 00DD GETNGBL R9 K5
0x8C241306, // 00DE GETMET R9 R9 K6
0x602C0008, // 00DF GETGBL R11 G8
0x88300D1C, // 00E0 GETMBR R12 R6 K28
0x7C2C0200, // 00E1 CALL R11 1
0x002E660B, // 00E2 ADD R11 K51 R11
0x002C1734, // 00E3 ADD R11 R11 K52
0x60300008, // 00E4 GETGBL R12 G8
0x88341135, // 00E5 GETMBR R13 R8 K53
0x7C300200, // 00E6 CALL R12 1
0x002C160C, // 00E7 ADD R11 R11 R12
0x58300015, // 00E8 LDCONST R12 K21
0x7C240600, // 00E9 CALL R9 3
0x8C240136, // 00EA GETMET R9 R0 K54
0x5C2C0C00, // 00EB MOVE R11 R6
0x50300000, // 00EC LDBOOL R12 0 0
0x7C240600, // 00ED CALL R9 3
0x50240000, // 00EE LDBOOL R9 0 0
0xA8040001, // 00EF EXBLK 1 1
0x80041200, // 00F0 RET 1 R9
0x8C240D37, // 00F1 GETMET R9 R6 K55
0x7C240200, // 00F2 CALL R9 1
0x5C281200, // 00F3 MOVE R10 R9
0x742A0002, // 00F4 JMPT R10 #00F8
0x50280000, // 00F5 LDBOOL R10 0 0
0xA8040001, // 00F6 EXBLK 1 1
0x80041400, // 00F7 RET 1 R10
0x88280D39, // 00F8 GETMBR R10 R6 K57
0x0428153A, // 00F9 SUB R10 R10 K58
0x402A260A, // 00FA CONNECT R10 K19 R10
0x882C0D38, // 00FB GETMBR R11 R6 K56
0x9428160A, // 00FC GETIDX R10 R11 R10
0x901A700A, // 00FD SETMBR R6 K56 R10
0x88280D38, // 00FE GETMBR R10 R6 K56
0x40281409, // 00FF CONNECT R10 R10 R9
0xB82A0A00, // 0100 GETNGBL R10 K5
0x8C281506, // 0101 GETMET R10 R10 K6
0x8C30091D, // 0102 GETMET R12 R4 K29
0x5838003B, // 0103 LDCONST R14 K59
0x883C0D39, // 0104 GETMBR R15 R6 K57
0x88400D38, // 0105 GETMBR R16 R6 K56
0x8C40213C, // 0106 GETMET R16 R16 K60
0x7C400200, // 0107 CALL R16 1
0x7C300800, // 0108 CALL R12 4
0x54360003, // 0109 LDINT R13 4
0x7C280600, // 010A CALL R10 3
0x8C280D21, // 010B GETMET R10 R6 K33
0x7C280200, // 010C CALL R10 1
0xB82A0A00, // 010D GETNGBL R10 K5
0x8C281506, // 010E GETMET R10 R10 K6
0x60300008, // 010F GETGBL R12 G8
0x88340D3E, // 0110 GETMBR R13 R6 K62
0x7C300200, // 0111 CALL R12 1
0x00327A0C, // 0112 ADD R12 K61 R12
0x0030193F, // 0113 ADD R12 R12 K63
0x60340008, // 0114 GETGBL R13 G8
0x88380D23, // 0115 GETMBR R14 R6 K35
0x7C340200, // 0116 CALL R13 1
0x0030180D, // 0117 ADD R12 R12 R13
0x00301940, // 0118 ADD R12 R12 K64
0x60340008, // 0119 GETGBL R13 G8
0x88380D27, // 011A GETMBR R14 R6 K39
0x543EFFFE, // 011B LDINT R15 65535
0x2C381C0F, // 011C AND R14 R14 R15
0x7C340200, // 011D CALL R13 1
0x0030180D, // 011E ADD R12 R12 R13
0x58340015, // 011F LDCONST R13 K21
0x7C280600, // 0120 CALL R10 3
0xB82A0A00, // 0121 GETNGBL R10 K5
0x8C281506, // 0122 GETMET R10 R10 K6
0x8C30091D, // 0123 GETMET R12 R4 K29
0x58380041, // 0124 LDCONST R14 K65
0x883C110F, // 0125 GETMBR R15 R8 K15
0x88400D3E, // 0126 GETMBR R16 R6 K62
0x88440D23, // 0127 GETMBR R17 R6 K35
0x88480D1C, // 0128 GETMBR R18 R6 K28
0x884C0D27, // 0129 GETMBR R19 R6 K39
0x60500008, // 012A GETGBL R20 G8
0x88540D2C, // 012B GETMBR R21 R6 K44
0x7C500200, // 012C CALL R20 1
0x88540D29, // 012D GETMBR R21 R6 K41
0x78560001, // 012E JMPF R21 #0131
0x5854002A, // 012F LDCONST R21 K42
0x70020000, // 0130 JMP #0132
0x5854002B, // 0131 LDCONST R21 K43
0x5C580400, // 0132 MOVE R22 R2
0x5C5C0600, // 0133 MOVE R23 R3
0x7C301600, // 0134 CALL R12 11
0x58340015, // 0135 LDCONST R13 K21
0x7C280600, // 0136 CALL R10 3
0x88280109, // 0137 GETMBR R10 R0 K9
0x8C281522, // 0138 GETMET R10 R10 K34
0x5C300C00, // 0139 MOVE R12 R6
0x7C280400, // 013A CALL R10 2
0x88280D3E, // 013B GETMBR R10 R6 K62
0x1C2C1513, // 013C EQ R11 R10 K19
0x782E0018, // 013D JMPF R11 #0157
0xB82E0A00, // 013E GETNGBL R11 K5
0x8C2C1706, // 013F GETMET R11 R11 K6
0xB8360200, // 0140 GETNGBL R13 K1
0x8C341B08, // 0141 GETMET R13 R13 K8
0x5C3C0C00, // 0142 MOVE R15 R6
0x7C340400, // 0143 CALL R13 2
0x0036840D, // 0144 ADD R13 K66 R13
0x58380015, // 0145 LDCONST R14 K21
0x7C2C0600, // 0146 CALL R11 3
0x882C0D23, // 0147 GETMBR R11 R6 K35
0x5432000F, // 0148 LDINT R12 16
0x1C2C160C, // 0149 EQ R11 R11 R12
0x782E0009, // 014A JMPF R11 #0155
0x882C0143, // 014B GETMBR R11 R0 K67
0x8C2C1744, // 014C GETMET R11 R11 K68
0x5C340C00, // 014D MOVE R13 R6
0x7C2C0400, // 014E CALL R11 2
0x5C141600, // 014F MOVE R5 R11
0x78160003, // 0150 JMPF R5 #0155
0x882C0143, // 0151 GETMBR R11 R0 K67
0x8C2C1745, // 0152 GETMET R11 R11 K69
0x5C340000, // 0153 MOVE R13 R0
0x542E0003, // 001A LDINT R11 4
0x7C200600, // 001B CALL R8 3
0x88200109, // 001C GETMBR R8 R0 K9
0x8820110A, // 001D GETMBR R8 R8 K10
0x8C20110B, // 001E GETMET R8 R8 K11
0x88280D0C, // 001F GETMBR R10 R6 K12
0x542E0059, // 0020 LDINT R11 90
0x7C200600, // 0021 CALL R8 3
0xB8260A00, // 0022 GETNGBL R9 K5
0x8C241306, // 0023 GETMET R9 R9 K6
0x602C0008, // 0024 GETGBL R11 G8
0x88300D0C, // 0025 GETMBR R12 R6 K12
0x7C2C0200, // 0026 CALL R11 1
0x002E1A0B, // 0027 ADD R11 K13 R11
0x002C170E, // 0028 ADD R11 R11 K14
0x60300008, // 0029 GETGBL R12 G8
0x8834110F, // 002A GETMBR R13 R8 K15
0x7C300200, // 002B CALL R12 1
0x002C160C, // 002C ADD R11 R11 R12
0x54320003, // 002D LDINT R12 4
0x7C240600, // 002E CALL R9 3
0x88240110, // 002F GETMBR R9 R0 K16
0x8C241311, // 0030 GETMET R9 R9 K17
0x5C2C0C00, // 0031 MOVE R11 R6
0x7C240400, // 0032 CALL R9 2
0xA8040001, // 0033 EXBLK 1 1
0x80041200, // 0034 RET 1 R9
0x70020133, // 0035 JMP #016A
0x88200D0F, // 0036 GETMBR R8 R6 K15
0x1C201112, // 0037 EQ R8 R8 K18
0x7822007D, // 0038 JMPF R8 #00B7
0x88200D13, // 0039 GETMBR R8 R6 K19
0x1C201112, // 003A EQ R8 R8 K18
0x7822007A, // 003B JMPF R8 #00B7
0x88200109, // 003C GETMBR R8 R0 K9
0x8820110A, // 003D GETMBR R8 R8 K10
0x8C20110B, // 003E GETMET R8 R8 K11
0x88280D0C, // 003F GETMBR R10 R6 K12
0x542E0059, // 0040 LDINT R11 90
0x7C200600, // 0041 CALL R8 3
0xB8260A00, // 0042 GETNGBL R9 K5
0x8C241306, // 0043 GETMET R9 R9 K6
0x602C0008, // 0044 GETGBL R11 G8
0x88300D0C, // 0045 GETMBR R12 R6 K12
0x7C2C0200, // 0046 CALL R11 1
0x002E1A0B, // 0047 ADD R11 K13 R11
0x002C170E, // 0048 ADD R11 R11 K14
0x60300008, // 0049 GETGBL R12 G8
0x8834110F, // 004A GETMBR R13 R8 K15
0x7C300200, // 004B CALL R12 1
0x002C160C, // 004C ADD R11 R11 R12
0x54320003, // 004D LDINT R12 4
0x7C240600, // 004E CALL R9 3
0x780A0000, // 004F JMPF R2 #0051
0x90222802, // 0050 SETMBR R8 K20 R2
0x780E0000, // 0051 JMPF R3 #0053
0x90222A03, // 0052 SETMBR R8 K21 R3
0x90222C00, // 0053 SETMBR R8 K22 R0
0x901A2E08, // 0054 SETMBR R6 K23 R8
0x88241118, // 0055 GETMBR R9 R8 K24
0x8C241319, // 0056 GETMET R9 R9 K25
0x882C0D1A, // 0057 GETMBR R11 R6 K26
0x50300000, // 0058 LDBOOL R12 0 0
0x7C240600, // 0059 CALL R9 3
0x74260011, // 005A JMPT R9 #006D
0xB8260A00, // 005B GETNGBL R9 K5
0x8C241306, // 005C GETMET R9 R9 K6
0x8C2C091B, // 005D GETMET R11 R4 K27
0x5834001C, // 005E LDCONST R13 K28
0x88380D1A, // 005F GETMBR R14 R6 K26
0x883C1118, // 0060 GETMBR R15 R8 K24
0x8C3C1F1D, // 0061 GETMET R15 R15 K29
0x7C3C0200, // 0062 CALL R15 1
0x7C2C0800, // 0063 CALL R11 4
0x5830001E, // 0064 LDCONST R12 K30
0x7C240600, // 0065 CALL R9 3
0x8C24011F, // 0066 GETMET R9 R0 K31
0x5C2C0C00, // 0067 MOVE R11 R6
0x50300000, // 0068 LDBOOL R12 0 0
0x7C240600, // 0069 CALL R9 3
0x50240000, // 006A LDBOOL R9 0 0
0xA8040001, // 006B EXBLK 1 1
0x80041200, // 006C RET 1 R9
0x8C240D20, // 006D GETMET R9 R6 K32
0x7C240200, // 006E CALL R9 1
0x74260002, // 006F JMPT R9 #0073
0x50240000, // 0070 LDBOOL R9 0 0
0xA8040001, // 0071 EXBLK 1 1
0x80041200, // 0072 RET 1 R9
0x88240109, // 0073 GETMBR R9 R0 K9
0x8C241321, // 0074 GETMET R9 R9 K33
0x5C2C0C00, // 0075 MOVE R11 R6
0x7C240400, // 0076 CALL R9 2
0x88240D22, // 0077 GETMBR R9 R6 K34
0x542A000F, // 0078 LDINT R10 16
0x2024120A, // 0079 NE R9 R9 R10
0x78260018, // 007A JMPF R9 #0094
0xB8260200, // 007B GETNGBL R9 K1
0x8C241323, // 007C GETMET R9 R9 K35
0x882C0D22, // 007D GETMBR R11 R6 K34
0x7C240400, // 007E CALL R9 2
0x5C281200, // 007F MOVE R10 R9
0x742A0004, // 0080 JMPT R10 #0086
0x8C28091B, // 0081 GETMET R10 R4 K27
0x58300024, // 0082 LDCONST R12 K36
0x88340D22, // 0083 GETMBR R13 R6 K34
0x7C280600, // 0084 CALL R10 3
0x5C241400, // 0085 MOVE R9 R10
0xB82A0A00, // 0086 GETNGBL R10 K5
0x8C281506, // 0087 GETMET R10 R10 K6
0x8C30091B, // 0088 GETMET R12 R4 K27
0x58380025, // 0089 LDCONST R14 K37
0x883C110F, // 008A GETMBR R15 R8 K15
0x5C401200, // 008B MOVE R16 R9
0x88440D1A, // 008C GETMBR R17 R6 K26
0x88480D26, // 008D GETMBR R18 R6 K38
0x5C4C0400, // 008E MOVE R19 R2
0x5C500600, // 008F MOVE R20 R3
0x7C301000, // 0090 CALL R12 8
0x58340027, // 0091 LDCONST R13 K39
0x7C280600, // 0092 CALL R10 3
0x70020013, // 0093 JMP #00A8
0xB8260A00, // 0094 GETNGBL R9 K5
0x8C241306, // 0095 GETMET R9 R9 K6
0x8C2C091B, // 0096 GETMET R11 R4 K27
0x58340028, // 0097 LDCONST R13 K40
0x8838110F, // 0098 GETMBR R14 R8 K15
0x883C0D1A, // 0099 GETMBR R15 R6 K26
0x88400D29, // 009A GETMBR R16 R6 K41
0x78420001, // 009B JMPF R16 #009E
0x5840002A, // 009C LDCONST R16 K42
0x70020000, // 009D JMP #009F
0x5840002B, // 009E LDCONST R16 K43
0x88440D26, // 009F GETMBR R17 R6 K38
0x60480008, // 00A0 GETGBL R18 G8
0x884C0D2C, // 00A1 GETMBR R19 R6 K44
0x7C480200, // 00A2 CALL R18 1
0x5C4C0400, // 00A3 MOVE R19 R2
0x5C500600, // 00A4 MOVE R20 R3
0x7C2C1200, // 00A5 CALL R11 9
0x5830001E, // 00A6 LDCONST R12 K30
0x7C240600, // 00A7 CALL R9 3
0x8824012D, // 00A8 GETMBR R9 R0 K45
0x8C24132E, // 00A9 GETMET R9 R9 K46
0x5C2C0C00, // 00AA MOVE R11 R6
0x7C240400, // 00AB CALL R9 2
0x5C141200, // 00AC MOVE R5 R9
0x5C240A00, // 00AD MOVE R9 R5
0x74260003, // 00AE JMPT R9 #00B3
0x8C24011F, // 00AF GETMET R9 R0 K31
0x5C2C0C00, // 00B0 MOVE R11 R6
0x50300000, // 00B1 LDBOOL R12 0 0
0x7C240600, // 00B2 CALL R9 3
0x50240200, // 00B3 LDBOOL R9 1 0
0xA8040001, // 00B4 EXBLK 1 1
0x80041200, // 00B5 RET 1 R9
0x700200B2, // 00B6 JMP #016A
0xB8220A00, // 00B7 GETNGBL R8 K5
0x8C201106, // 00B8 GETMET R8 R8 K6
0x8C28091B, // 00B9 GETMET R10 R4 K27
0x5830002F, // 00BA LDCONST R12 K47
0x88340D0F, // 00BB GETMBR R13 R6 K15
0x88380D1A, // 00BC GETMBR R14 R6 K26
0x7C280800, // 00BD CALL R10 4
0x582C001E, // 00BE LDCONST R11 K30
0x7C200600, // 00BF CALL R8 3
0x88200109, // 00C0 GETMBR R8 R0 K9
0x8820110A, // 00C1 GETMBR R8 R8 K10
0x8C201130, // 00C2 GETMET R8 R8 K48
0x88280D0F, // 00C3 GETMBR R10 R6 K15
0x7C200400, // 00C4 CALL R8 2
0x4C240000, // 00C5 LDNIL R9
0x1C241009, // 00C6 EQ R9 R8 R9
0x7826000A, // 00C7 JMPF R9 #00D3
0xB8260A00, // 00C8 GETNGBL R9 K5
0x8C241306, // 00C9 GETMET R9 R9 K6
0x602C0008, // 00CA GETGBL R11 G8
0x88300D0F, // 00CB GETMBR R12 R6 K15
0x7C2C0200, // 00CC CALL R11 1
0x002E620B, // 00CD ADD R11 K49 R11
0x58300027, // 00CE LDCONST R12 K39
0x7C240600, // 00CF CALL R9 3
0x50240000, // 00D0 LDBOOL R9 0 0
0xA8040001, // 00D1 EXBLK 1 1
0x80041200, // 00D2 RET 1 R9
0x780A0000, // 00D3 JMPF R2 #00D5
0x90222802, // 00D4 SETMBR R8 K20 R2
0x780E0000, // 00D5 JMPF R3 #00D7
0x90222A03, // 00D6 SETMBR R8 K21 R3
0x90222C00, // 00D7 SETMBR R8 K22 R0
0x901A2E08, // 00D8 SETMBR R6 K23 R8
0x8C241132, // 00D9 GETMET R9 R8 K50
0x882C0D1A, // 00DA GETMBR R11 R6 K26
0x50300200, // 00DB LDBOOL R12 1 0
0x7C240600, // 00DC CALL R9 3
0x74260013, // 00DD JMPT R9 #00F2
0xB8260A00, // 00DE GETNGBL R9 K5
0x8C241306, // 00DF GETMET R9 R9 K6
0x602C0008, // 00E0 GETGBL R11 G8
0x88300D1A, // 00E1 GETMBR R12 R6 K26
0x7C2C0200, // 00E2 CALL R11 1
0x002E660B, // 00E3 ADD R11 K51 R11
0x002C1734, // 00E4 ADD R11 R11 K52
0x60300008, // 00E5 GETGBL R12 G8
0x88341135, // 00E6 GETMBR R13 R8 K53
0x7C300200, // 00E7 CALL R12 1
0x002C160C, // 00E8 ADD R11 R11 R12
0x5830001E, // 00E9 LDCONST R12 K30
0x7C240600, // 00EA CALL R9 3
0x8C240136, // 00EB GETMET R9 R0 K54
0x5C2C0C00, // 00EC MOVE R11 R6
0x50300000, // 00ED LDBOOL R12 0 0
0x7C240600, // 00EE CALL R9 3
0x50240000, // 00EF LDBOOL R9 0 0
0xA8040001, // 00F0 EXBLK 1 1
0x80041200, // 00F1 RET 1 R9
0x8C240D37, // 00F2 GETMET R9 R6 K55
0x7C240200, // 00F3 CALL R9 1
0x5C281200, // 00F4 MOVE R10 R9
0x742A0002, // 00F5 JMPT R10 #00F9
0x50280000, // 00F6 LDBOOL R10 0 0
0xA8040001, // 00F7 EXBLK 1 1
0x80041400, // 00F8 RET 1 R10
0x88280D39, // 00F9 GETMBR R10 R6 K57
0x0428153A, // 00FA SUB R10 R10 K58
0x402A240A, // 00FB CONNECT R10 K18 R10
0x882C0D38, // 00FC GETMBR R11 R6 K56
0x9428160A, // 00FD GETIDX R10 R11 R10
0x901A700A, // 00FE SETMBR R6 K56 R10
0x88280D38, // 00FF GETMBR R10 R6 K56
0x40281409, // 0100 CONNECT R10 R10 R9
0xB82A0A00, // 0101 GETNGBL R10 K5
0x8C281506, // 0102 GETMET R10 R10 K6
0x8C30091B, // 0103 GETMET R12 R4 K27
0x5838003B, // 0104 LDCONST R14 K59
0x883C0D39, // 0105 GETMBR R15 R6 K57
0x88400D38, // 0106 GETMBR R16 R6 K56
0x8C40213C, // 0107 GETMET R16 R16 K60
0x7C400200, // 0108 CALL R16 1
0x7C300800, // 0109 CALL R12 4
0x54360003, // 010A LDINT R13 4
0x7C280600, // 010B CALL R10 3
0x8C280D20, // 010C GETMET R10 R6 K32
0x7C280200, // 010D CALL R10 1
0xB82A0A00, // 010E GETNGBL R10 K5
0x8C281506, // 010F GETMET R10 R10 K6
0x60300008, // 0110 GETGBL R12 G8
0x88340D3E, // 0111 GETMBR R13 R6 K62
0x7C300200, // 0112 CALL R12 1
0x00327A0C, // 0113 ADD R12 K61 R12
0x0030193F, // 0114 ADD R12 R12 K63
0x60340008, // 0115 GETGBL R13 G8
0x88380D22, // 0116 GETMBR R14 R6 K34
0x7C340200, // 0117 CALL R13 1
0x0030180D, // 0118 ADD R12 R12 R13
0x00301940, // 0119 ADD R12 R12 K64
0x60340008, // 011A GETGBL R13 G8
0x88380D26, // 011B GETMBR R14 R6 K38
0x543EFFFE, // 011C LDINT R15 65535
0x2C381C0F, // 011D AND R14 R14 R15
0x7C340200, // 011E CALL R13 1
0x0030180D, // 011F ADD R12 R12 R13
0x5834001E, // 0120 LDCONST R13 K30
0x7C280600, // 0121 CALL R10 3
0xB82A0A00, // 0122 GETNGBL R10 K5
0x8C281506, // 0123 GETMET R10 R10 K6
0x8C30091B, // 0124 GETMET R12 R4 K27
0x58380041, // 0125 LDCONST R14 K65
0x883C110F, // 0126 GETMBR R15 R8 K15
0x88400D3E, // 0127 GETMBR R16 R6 K62
0x88440D22, // 0128 GETMBR R17 R6 K34
0x88480D1A, // 0129 GETMBR R18 R6 K26
0x884C0D26, // 012A GETMBR R19 R6 K38
0x60500008, // 012B GETGBL R20 G8
0x88540D2C, // 012C GETMBR R21 R6 K44
0x7C500200, // 012D CALL R20 1
0x88540D29, // 012E GETMBR R21 R6 K41
0x78560001, // 012F JMPF R21 #0132
0x5854002A, // 0130 LDCONST R21 K42
0x70020000, // 0131 JMP #0133
0x5854002B, // 0132 LDCONST R21 K43
0x5C580400, // 0133 MOVE R22 R2
0x5C5C0600, // 0134 MOVE R23 R3
0x7C301600, // 0135 CALL R12 11
0x5834001E, // 0136 LDCONST R13 K30
0x7C280600, // 0137 CALL R10 3
0x88280109, // 0138 GETMBR R10 R0 K9
0x8C281521, // 0139 GETMET R10 R10 K33
0x5C300C00, // 013A MOVE R12 R6
0x7C280400, // 013B CALL R10 2
0x88280D3E, // 013C GETMBR R10 R6 K62
0x1C2C1512, // 013D EQ R11 R10 K18
0x782E000F, // 013E JMPF R11 #014F
0x882C0D22, // 013F GETMBR R11 R6 K34
0x5432000F, // 0140 LDINT R12 16
0x1C2C160C, // 0141 EQ R11 R11 R12
0x782E0009, // 0142 JMPF R11 #014D
0x882C0142, // 0143 GETMBR R11 R0 K66
0x8C2C1743, // 0144 GETMET R11 R11 K67
0x5C340C00, // 0145 MOVE R13 R6
0x7C2C0400, // 0146 CALL R11 2
0x5C141600, // 0147 MOVE R5 R11
0x78160003, // 0148 JMPF R5 #014D
0x882C0142, // 0149 GETMBR R11 R0 K66
0x8C2C1744, // 014A GETMET R11 R11 K68
0x5C340000, // 014B MOVE R13 R0
0x7C2C0400, // 014C CALL R11 2
0x50140200, // 014D LDBOOL R5 1 0
0x7002001A, // 014E JMP #016A
0x1C2C153A, // 014F EQ R11 R10 K58
0x782E0010, // 0150 JMPF R11 #0162
0x882C0142, // 0151 GETMBR R11 R0 K66
0x8C2C172E, // 0152 GETMET R11 R11 K46
0x5C340C00, // 0153 MOVE R13 R6
0x7C2C0400, // 0154 CALL R11 2
0x50140200, // 0155 LDBOOL R5 1 0
0x7002001A, // 0156 JMP #0172
0x1C2C153A, // 0157 EQ R11 R10 K58
0x782E0010, // 0158 JMPF R11 #016A
0x882C0143, // 0159 GETMBR R11 R0 K67
0x8C2C172E, // 015A GETMET R11 R11 K46
0x5C340C00, // 015B MOVE R13 R6
0x7C2C0400, // 015C CALL R11 2
0x5C141600, // 015D MOVE R5 R11
0x78160004, // 015E JMPF R5 #0164
0x882C0143, // 015F GETMBR R11 R0 K67
0x8C2C1745, // 0160 GETMET R11 R11 K69
0x5C340000, // 0161 MOVE R13 R0
0x7C2C0400, // 0162 CALL R11 2
0x70020003, // 0163 JMP #0168
0x8C2C0136, // 0164 GETMET R11 R0 K54
0x5C340C00, // 0165 MOVE R13 R6
0x50380200, // 0166 LDBOOL R14 1 0
0x7C2C0600, // 0167 CALL R11 3
0x50140200, // 0168 LDBOOL R5 1 0
0x70020007, // 0169 JMP #0172
0xB82E0A00, // 016A GETNGBL R11 K5
0x8C2C1706, // 016B GETMET R11 R11 K6
0x60340008, // 016C GETGBL R13 G8
0x5C381400, // 016D MOVE R14 R10
0x7C340200, // 016E CALL R13 1
0x00368C0D, // 016F ADD R13 K70 R13
0x58380015, // 0170 LDCONST R14 K21
0x7C2C0600, // 0171 CALL R11 3
0xA8040001, // 0172 EXBLK 1 1
0x80040A00, // 0173 RET 1 R5
0xA8040001, // 0174 EXBLK 1 1
0x70020014, // 0175 JMP #018B
0xAC180002, // 0176 CATCH R6 0 2
0x70020011, // 0177 JMP #018A
0xB8220A00, // 0178 GETNGBL R8 K5
0x8C201106, // 0179 GETMET R8 R8 K6
0x60280008, // 017A GETGBL R10 G8
0x5C2C0C00, // 017B MOVE R11 R6
0x7C280200, // 017C CALL R10 1
0x002A8E0A, // 017D ADD R10 K71 R10
0x00281548, // 017E ADD R10 R10 K72
0x602C0008, // 017F GETGBL R11 G8
0x5C300E00, // 0180 MOVE R12 R7
0x7C2C0200, // 0181 CALL R11 1
0x0028140B, // 0182 ADD R10 R10 R11
0x7C200400, // 0183 CALL R8 2
0xA4229200, // 0184 IMPORT R8 K73
0x8C24114A, // 0185 GETMET R9 R8 K74
0x7C240200, // 0186 CALL R9 1
0x50240000, // 0187 LDBOOL R9 0 0
0x80041200, // 0188 RET 1 R9
0x70020000, // 0189 JMP #018B
0xB0080000, // 018A RAISE 2 R0 R0
0x80000000, // 018B RET 0
0x5C141600, // 0155 MOVE R5 R11
0x78160004, // 0156 JMPF R5 #015C
0x882C0142, // 0157 GETMBR R11 R0 K66
0x8C2C1744, // 0158 GETMET R11 R11 K68
0x5C340000, // 0159 MOVE R13 R0
0x7C2C0400, // 015A CALL R11 2
0x70020003, // 015B JMP #0160
0x8C2C0136, // 015C GETMET R11 R0 K54
0x5C340C00, // 015D MOVE R13 R6
0x50380200, // 015E LDBOOL R14 1 0
0x7C2C0600, // 015F CALL R11 3
0x50140200, // 0160 LDBOOL R5 1 0
0x70020007, // 0161 JMP #016A
0xB82E0A00, // 0162 GETNGBL R11 K5
0x8C2C1706, // 0163 GETMET R11 R11 K6
0x60340008, // 0164 GETGBL R13 G8
0x5C381400, // 0165 MOVE R14 R10
0x7C340200, // 0166 CALL R13 1
0x00368A0D, // 0167 ADD R13 K69 R13
0x5838001E, // 0168 LDCONST R14 K30
0x7C2C0600, // 0169 CALL R11 3
0xA8040001, // 016A EXBLK 1 1
0x80040A00, // 016B RET 1 R5
0xA8040001, // 016C EXBLK 1 1
0x70020014, // 016D JMP #0183
0xAC180002, // 016E CATCH R6 0 2
0x70020011, // 016F JMP #0182
0xB8220A00, // 0170 GETNGBL R8 K5
0x8C201106, // 0171 GETMET R8 R8 K6
0x60280008, // 0172 GETGBL R10 G8
0x5C2C0C00, // 0173 MOVE R11 R6
0x7C280200, // 0174 CALL R10 1
0x002A8C0A, // 0175 ADD R10 K70 R10
0x00281547, // 0176 ADD R10 R10 K71
0x602C0008, // 0177 GETGBL R11 G8
0x5C300E00, // 0178 MOVE R12 R7
0x7C2C0200, // 0179 CALL R11 1
0x0028140B, // 017A ADD R10 R10 R11
0x7C200400, // 017B CALL R8 2
0xA4229000, // 017C IMPORT R8 K72
0x8C241149, // 017D GETMET R9 R8 K73
0x7C240200, // 017E CALL R9 1
0x50240000, // 017F LDBOOL R9 0 0
0x80041200, // 0180 RET 1 R9
0x70020000, // 0181 JMP #0183
0xB0080000, // 0182 RAISE 2 R0 R0
0x80000000, // 0183 RET 0
})
)
);

View File

@ -124,7 +124,7 @@ be_local_closure(Matter_Session_Store_find_session_by_resumption_id, /* name *
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[12]) { /* constants */
( &(const bvalue[13]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_const_int(0),
/* K2 */ be_nested_str_weak(sessions),
@ -133,14 +133,15 @@ be_local_closure(Matter_Session_Store_find_session_by_resumption_id, /* name *
/* K5 */ be_nested_str_weak(format),
/* K6 */ be_nested_str_weak(MTR_X3A_X20session_X2Eresumption_id_X3D_X25s_X20vs_X20_X25s),
/* K7 */ be_nested_str_weak(resumption_id),
/* K8 */ be_nested_str_weak(shared_secret),
/* K9 */ be_nested_str_weak(MTR_X3A_X20session_X2Eshared_secret_X3D_X25s),
/* K10 */ be_nested_str_weak(update),
/* K11 */ be_const_int(1),
/* K8 */ be_const_int(3),
/* K9 */ be_nested_str_weak(shared_secret),
/* K10 */ be_nested_str_weak(MTR_X3A_X20session_X2Eshared_secret_X3D_X25s),
/* K11 */ be_nested_str_weak(update),
/* K12 */ be_const_int(1),
}),
be_str_weak(find_session_by_resumption_id),
&be_const_str_solidified,
( &(const binstruction[47]) { /* code */
( &(const binstruction[49]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x5C0C0200, // 0001 MOVE R3 R1
0x740E0001, // 0002 JMPT R3 #0005
@ -152,7 +153,7 @@ be_local_closure(Matter_Session_Store_find_session_by_resumption_id, /* name *
0x5C180800, // 0008 MOVE R6 R4
0x7C140200, // 0009 CALL R5 1
0x14140605, // 000A LT R5 R3 R5
0x78160021, // 000B JMPF R5 #002E
0x78160023, // 000B JMPF R5 #0030
0x94140803, // 000C GETIDX R5 R4 R3
0xB81A0600, // 000D GETNGBL R6 K3
0x8C180D04, // 000E GETMET R6 R6 K4
@ -165,29 +166,31 @@ be_local_closure(Matter_Session_Store_find_session_by_resumption_id, /* name *
0x5C340200, // 0015 MOVE R13 R1
0x7C300200, // 0016 CALL R12 1
0x7C200800, // 0017 CALL R8 4
0x7C180400, // 0018 CALL R6 2
0x88180B07, // 0019 GETMBR R6 R5 K7
0x1C180C01, // 001A EQ R6 R6 R1
0x781A000F, // 001B JMPF R6 #002C
0x88180B08, // 001C GETMBR R6 R5 K8
0x4C1C0000, // 001D LDNIL R7
0x20180C07, // 001E NE R6 R6 R7
0x781A000B, // 001F JMPF R6 #002C
0xB81A0600, // 0020 GETNGBL R6 K3
0x8C180D04, // 0021 GETMET R6 R6 K4
0x8C200505, // 0022 GETMET R8 R2 K5
0x58280009, // 0023 LDCONST R10 K9
0x602C0008, // 0024 GETGBL R11 G8
0x88300B08, // 0025 GETMBR R12 R5 K8
0x7C2C0200, // 0026 CALL R11 1
0x7C200600, // 0027 CALL R8 3
0x7C180400, // 0028 CALL R6 2
0x8C180B0A, // 0029 GETMET R6 R5 K10
0x7C180200, // 002A CALL R6 1
0x80040A00, // 002B RET 1 R5
0x000C070B, // 002C ADD R3 R3 K11
0x7001FFD8, // 002D JMP #0007
0x80000000, // 002E RET 0
0x58240008, // 0018 LDCONST R9 K8
0x7C180600, // 0019 CALL R6 3
0x88180B07, // 001A GETMBR R6 R5 K7
0x1C180C01, // 001B EQ R6 R6 R1
0x781A0010, // 001C JMPF R6 #002E
0x88180B09, // 001D GETMBR R6 R5 K9
0x4C1C0000, // 001E LDNIL R7
0x20180C07, // 001F NE R6 R6 R7
0x781A000C, // 0020 JMPF R6 #002E
0xB81A0600, // 0021 GETNGBL R6 K3
0x8C180D04, // 0022 GETMET R6 R6 K4
0x8C200505, // 0023 GETMET R8 R2 K5
0x5828000A, // 0024 LDCONST R10 K10
0x602C0008, // 0025 GETGBL R11 G8
0x88300B09, // 0026 GETMBR R12 R5 K9
0x7C2C0200, // 0027 CALL R11 1
0x7C200600, // 0028 CALL R8 3
0x58240008, // 0029 LDCONST R9 K8
0x7C180600, // 002A CALL R6 3
0x8C180B0B, // 002B GETMET R6 R5 K11
0x7C180200, // 002C CALL R6 1
0x80040A00, // 002D RET 1 R5
0x000C070C, // 002E ADD R3 R3 K12
0x7001FFD6, // 002F JMP #0007
0x80000000, // 0030 RET 0
})
)
);

View File

@ -223,6 +223,10 @@ void sayTime(int hour, int minutes);
void Cmd_MicRec(void);
void Cmd_wav2mp3(void);
void Cmd_Time(void);
#ifdef USE_I2S_RTTTL
void Rtttl(char *buffer);
void Cmd_I2SRtttl(void);
#endif
void copy_micpars(uint32_t port) {
audio_i2s.mic_mclk = audio_i2s.mclk;
@ -606,6 +610,9 @@ const char kI2SAudio_Commands[] PROGMEM = "I2S|"
#ifdef USE_I2S_SAY_TIME
"|Time"
#endif // USE_I2S_SAY_TIME
#ifdef USE_I2S_RTTTL
"|Rtttl"
#endif
#ifdef ESP32
"|Play"
#ifdef USE_I2S_WEBRADIO
@ -629,6 +636,9 @@ void (* const I2SAudio_Command[])(void) PROGMEM = {
#ifdef USE_I2S_SAY_TIME
,&Cmd_Time
#endif // USE_I2S_SAY_TIME
#ifdef USE_I2S_RTTTL
,&Cmd_I2SRtttl
#endif
#ifdef ESP32
,&Cmd_Play
#ifdef USE_I2S_WEBRADIO
@ -671,6 +681,15 @@ void Cmd_Say(void) {
ResponseCmndChar(XdrvMailbox.data);
}
#ifdef USE_I2S_RTTTL
void Cmd_I2SRtttl(void) {
if (XdrvMailbox.data_len > 0) {
Rtttl(XdrvMailbox.data);
}
ResponseCmndChar(XdrvMailbox.data);
}
#endif
/*********************************************************************************************\
* Interface
\*********************************************************************************************/

View File

@ -0,0 +1,54 @@
/*
audio is2 RTTTL
Copyright (C) 2023 Fernando Pena López
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 <http://www.gnu.org/licenses/>.
*/
#if (defined(USE_I2S_AUDIO) || defined(USE_TTGO_WATCH) || defined(USE_M5STACK_CORE2) || defined(ESP32S3_BOX))
#ifdef USE_I2S_RTTTL
#include "AudioFileSourcePROGMEM.h"
#include "AudioGeneratorRTTTL.h"
void Rtttl(char *buffer);
void Rtttl(char *buffer) {
if (!audio_i2s.out) return;
AudioGeneratorRTTTL *rtttl;
AudioFileSourcePROGMEM *file = NULL;
file = new AudioFileSourcePROGMEM(buffer, strlen(buffer));
rtttl = new AudioGeneratorRTTTL();
AUDIO_PWR_ON
rtttl->begin(file, audio_i2s.out);
while(rtttl->isRunning()) {
if (!rtttl->loop()) {
rtttl->stop();
} else {
delay(1); // Keep the dog happy
}
}
audio_i2s.out->stop();
AUDIO_PWR_OFF
delete rtttl;
delete file;
}
#endif // USE_I2S_RTTTL
#endif // is2audio