Matter support subscription removal (#18018)

This commit is contained in:
s-hadinger 2023-02-21 23:02:13 +01:00 committed by GitHub
parent 103041cd1a
commit 8a15f0426f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 1494 additions and 1304 deletions

View File

@ -73,6 +73,20 @@ class Matter_IM
return false return false
end end
#############################################################
# check whether the ack received is of interest to any
# current exchange
#
# return `true` if handled
def process_incoming_ack(msg)
# check if there is an exchange_id interested in receiving this
var message = self.find_sendqueue_by_exchangeid(msg.exchange_id)
if message
return message.ack_received(msg) # dispatch to IM_Message
end
return false
end
############################################################# #############################################################
# send enqueued responses # send enqueued responses
# #
@ -139,13 +153,13 @@ class Matter_IM
if status == matter.SUCCESS if status == matter.SUCCESS
tasmota.log("MTR: >Status_OK", 2) # don't show 'SUCCESS' to not overflow logs with non-information tasmota.log("MTR: >Status_OK", 2) # don't show 'SUCCESS' to not overflow logs with non-information
if message if message
return message.ack_received(msg) # re-arm the sending of next packets for the same exchange return message.status_ok_received(msg) # re-arm the sending of next packets for the same exchange
end end
else else
# error # error
tasmota.log(string.format("MTR: >Status ERROR = 0x%02X", status), 2) tasmota.log(string.format("MTR: >Status ERROR = 0x%02X", status), 2)
if message if message
message.ack_error(msg) message.status_error_received(msg)
self.remove_sendqueue_by_exchangeid(msg.exchange_id) self.remove_sendqueue_by_exchangeid(msg.exchange_id)
end end
end end
@ -242,7 +256,7 @@ class Matter_IM
) )
end end
tasmota.log("MTR: ReportDataMessage=" + str(ret), 4) tasmota.log("MTR: ReportDataMessage=" + str(ret), 3)
tasmota.log("MTR: ReportDataMessageTLV=" + str(ret.to_TLV()), 3) tasmota.log("MTR: ReportDataMessageTLV=" + str(ret.to_TLV()), 3)
return ret return ret
@ -540,7 +554,11 @@ class Matter_IM
fake_read.attributes_requests.push(p1) fake_read.attributes_requests.push(p1)
end end
tasmota.log("MTR: <Sub_ack sub_id=" + str(sub.subscription_id), 2) if size(fake_read.attributes_requests) > 0
tasmota.log("MTR: <Sub_data sub_id=" + str(sub.subscription_id), 2)
else
tasmota.log("MTR: <Sub_alive sub_id=" + str(sub.subscription_id), 2)
end
var ret = self._inner_process_read_request(session, fake_read) var ret = self._inner_process_read_request(session, fake_read)
ret.suppress_response = (size(fake_read.attributes_requests) == 0) # ret is of class `ReportDataMessage` ret.suppress_response = (size(fake_read.attributes_requests) == 0) # ret is of class `ReportDataMessage`
ret.subscription_id = sub.subscription_id ret.subscription_id = sub.subscription_id

View File

@ -77,6 +77,12 @@ class Matter_IM_Message
# ack received for previous message, proceed to next (if any) # 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 # return true if we manage the ack ourselves, false if it needs to be done upper
def ack_received(msg) def ack_received(msg)
return false
end
# Status Report OK 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)
if msg if msg
self.resp = msg.build_response(self.resp.opcode, self.resp.x_flag_r, self.resp) # update packet self.resp = msg.build_response(self.resp.opcode, self.resp.x_flag_r, self.resp) # update packet
end end
@ -85,7 +91,7 @@ class Matter_IM_Message
end end
# we received an ACK error, do any necessary cleaning # we received an ACK error, do any necessary cleaning
def ack_error(msg) def status_error_received(msg)
end end
# get the exchange-id for this message # get the exchange-id for this message
@ -196,7 +202,7 @@ class Matter_IM_ReportData : Matter_IM_Message
end end
end end
tasmota.log(string.format("MTR: elements=%i msg_sz=%i total=%i", elements, msg_sz, size(ret.attribute_reports)), 3) tasmota.log(string.format("MTR: elements=%i msg_sz=%i total=%i", elements, msg_sz, size(ret.attribute_reports)), 4)
var next_elemnts = ret.attribute_reports[elements .. ] var next_elemnts = ret.attribute_reports[elements .. ]
ret.attribute_reports = ret.attribute_reports[0 .. elements - 1] ret.attribute_reports = ret.attribute_reports[0 .. elements - 1]
ret.more_chunked_messages = (size(next_elemnts) > 0) ret.more_chunked_messages = (size(next_elemnts) > 0)
@ -248,18 +254,28 @@ class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
self.report_data_phase = true self.report_data_phase = true
end end
# ack received, confirm the heartbeat
def ack_received(msg)
if !self.report_data_phase
# if ack is received while all data is sent, means that it finished without error
return true # proceed to calling send()
else
return false # do nothing
end
end
# we received an ACK error, remove subscription # we received an ACK error, remove subscription
def ack_error(msg) def status_error_received(msg)
self.sub.remove_self() self.sub.remove_self()
end end
# ack received for previous message, proceed to next (if any) # 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 # return true if we manage the ack ourselves, false if it needs to be done upper
def ack_received(msg) def status_ok_received(msg)
if self.report_data_phase if self.report_data_phase
return super(self).ack_received(msg) return super(self).status_ok_received(msg)
else else
super(self).ack_received(nil) super(self).status_ok_received(nil)
return false # let the caller to the ack return false # let the caller to the ack
end end
end end
@ -285,8 +301,13 @@ class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
else else
# simple heartbeat ReportData # simple heartbeat ReportData
super(self).send(responder) if self.report_data_phase
return true # don't expect any response super(self).send(responder)
self.report_data_phase = false
return false # don't expect any response
else
return true # we're done, remove message
end
end end
end end
end end

View File

@ -81,6 +81,7 @@ class Matter_IM_Subscription
# remove self from subs list # remove self from subs list
def remove_self() def remove_self()
tasmota.log("MTR: Remove_Sub sub_id=" + str(self.subscription_id))
self.subs.remove_sub(self) self.subs.remove_sub(self)
end end

View File

@ -465,7 +465,7 @@ class Matter_Frame
var r = matter.Frame(self.message_handler, raw) var r = matter.Frame(self.message_handler, raw)
r.decode_header() r.decode_header()
r.decode_payload() r.decode_payload()
tasmota.log("MTR: sending decode: " + matter.inspect(r), 4) tasmota.log("MTR: sending decode: " + matter.inspect(r), 3)
end end
end end
matter.Frame = Matter_Frame matter.Frame = Matter_Frame

View File

@ -80,7 +80,7 @@ class Matter_MessageHandler
if !op_name op_name = string.format("0x%02X", frame.opcode) end if !op_name op_name = string.format("0x%02X", frame.opcode) end
tasmota.log(string.format("MTR: >Received %s from [%s]:%i", op_name, addr, port), 2) tasmota.log(string.format("MTR: >Received %s from [%s]:%i", op_name, addr, port), 2)
end end
self.commissioning.process_incoming(frame, addr, port) self.commissioning.process_incoming(frame)
return true return true
else else
############################################################# #############################################################
@ -112,7 +112,7 @@ class Matter_MessageHandler
frame.raw .. cleartext # add cleartext frame.raw .. cleartext # add cleartext
# continue decoding # continue decoding
tasmota.log(string.format("MTR: idx=%i clear=%s", frame.payload_idx, frame.raw.tohex()), 3) tasmota.log(string.format("MTR: idx=%i clear=%s", frame.payload_idx, frame.raw.tohex()), 4)
frame.decode_payload() frame.decode_payload()
tasmota.log("MTR: decrypted message: protocol_id:"+str(frame.protocol_id)+" opcode="+str(frame.opcode)+" exchange_id="+str(frame.exchange_id & 0xFFFF), 3) tasmota.log("MTR: decrypted message: protocol_id:"+str(frame.protocol_id)+" opcode="+str(frame.opcode)+" exchange_id="+str(frame.exchange_id & 0xFFFF), 3)
@ -123,12 +123,16 @@ class Matter_MessageHandler
if protocol_id == 0x0000 # PROTOCOL_ID_SECURE_CHANNEL if protocol_id == 0x0000 # PROTOCOL_ID_SECURE_CHANNEL
# it should not be encrypted # 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 if frame.opcode == 0x10 # MRPStandaloneAcknowledgement
# end ret = self.im.process_incoming_ack(frame)
if ret
self.im.send_enqueued(self)
end
end
ret = true ret = true
elif protocol_id == 0x0001 # PROTOCOL_ID_INTERACTION_MODEL elif protocol_id == 0x0001 # PROTOCOL_ID_INTERACTION_MODEL
# dispatch to IM Protocol Messages # dispatch to IM Protocol Messages
ret = self.im.process_incoming(frame, addr, port) ret = self.im.process_incoming(frame)
# if `ret` is true, we have something to send # if `ret` is true, we have something to send
if ret if ret
self.im.send_enqueued(self) self.im.send_enqueued(self)
@ -139,6 +143,7 @@ class Matter_MessageHandler
resp.encrypt() resp.encrypt()
self.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter) self.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter)
end end
ret = true
# -- PROTOCOL_ID_BDX is used for file transfer between devices, not used in Tasmota # -- PROTOCOL_ID_BDX is used for file transfer between devices, not used in Tasmota
# elif protocol_id == 0x0002 # PROTOCOL_ID_BDX -- BDX not handled at all in Tasmota # elif protocol_id == 0x0002 # PROTOCOL_ID_BDX -- BDX not handled at all in Tasmota

View File

@ -167,7 +167,7 @@ class Matter_UDPServer
else else
import string import string
self.packets_sent.remove(packet.msg_id) self.packets_sent.remove(packet.msg_id)
tasmota.log(string.format("MTR: target unreachable '[%s]:%i'", packet.addr, packet.port), 2) tasmota.log(string.format("MTR: target unreachable '[%s]:%i' msg_id=%i", packet.addr, packet.port, packet.msg_id), 2)
end end
end end
end end

File diff suppressed because it is too large Load Diff

View File

@ -148,9 +148,9 @@ void be_load_Matter_Path_class(bvm *vm) {
extern const bclass be_class_Matter_IM_Message; extern const bclass be_class_Matter_IM_Message;
/******************************************************************** /********************************************************************
** Solidified function: ack_received ** Solidified function: status_ok_received
********************************************************************/ ********************************************************************/
be_local_closure(Matter_IM_Message_ack_received, /* name */ be_local_closure(Matter_IM_Message_status_ok_received, /* name */
be_nested_proto( be_nested_proto(
7, /* nstack */ 7, /* nstack */
2, /* argc */ 2, /* argc */
@ -167,7 +167,7 @@ be_local_closure(Matter_IM_Message_ack_received, /* name */
/* K3 */ be_nested_str_weak(x_flag_r), /* K3 */ be_nested_str_weak(x_flag_r),
/* K4 */ be_nested_str_weak(ready), /* K4 */ be_nested_str_weak(ready),
}), }),
be_str_weak(ack_received), be_str_weak(status_ok_received),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[13]) { /* code */ ( &(const binstruction[13]) { /* code */
0x78060007, // 0000 JMPF R1 #0009 0x78060007, // 0000 JMPF R1 #0009
@ -189,65 +189,6 @@ be_local_closure(Matter_IM_Message_ack_received, /* name */
/*******************************************************************/ /*******************************************************************/
/********************************************************************
** Solidified function: ack_error
********************************************************************/
be_local_closure(Matter_IM_Message_ack_error, /* name */
be_nested_proto(
2, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
0, /* has constants */
NULL, /* no const */
be_str_weak(ack_error),
&be_const_str_solidified,
( &(const binstruction[ 1]) { /* code */
0x80000000, // 0000 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: init
********************************************************************/
be_local_closure(Matter_IM_Message_init, /* name */
be_nested_proto(
8, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 3]) { /* constants */
/* K0 */ be_nested_str_weak(resp),
/* K1 */ be_nested_str_weak(build_response),
/* K2 */ be_nested_str_weak(ready),
}),
be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[ 8]) { /* code */
0x8C100301, // 0000 GETMET R4 R1 K1
0x5C180400, // 0001 MOVE R6 R2
0x5C1C0600, // 0002 MOVE R7 R3
0x7C100600, // 0003 CALL R4 3
0x90020004, // 0004 SETMBR R0 K0 R4
0x50100200, // 0005 LDBOOL R4 1 0
0x90020404, // 0006 SETMBR R0 K2 R4
0x80000000, // 0007 RET 0
})
)
);
/*******************************************************************/
/******************************************************************** /********************************************************************
** Solidified function: get_exchangeid ** Solidified function: get_exchangeid
********************************************************************/ ********************************************************************/
@ -329,22 +270,107 @@ be_local_closure(Matter_IM_Message_send, /* name */
/*******************************************************************/ /*******************************************************************/
/********************************************************************
** Solidified function: init
********************************************************************/
be_local_closure(Matter_IM_Message_init, /* name */
be_nested_proto(
8, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 3]) { /* constants */
/* K0 */ be_nested_str_weak(resp),
/* K1 */ be_nested_str_weak(build_response),
/* K2 */ be_nested_str_weak(ready),
}),
be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[ 8]) { /* code */
0x8C100301, // 0000 GETMET R4 R1 K1
0x5C180400, // 0001 MOVE R6 R2
0x5C1C0600, // 0002 MOVE R7 R3
0x7C100600, // 0003 CALL R4 3
0x90020004, // 0004 SETMBR R0 K0 R4
0x50100200, // 0005 LDBOOL R4 1 0
0x90020404, // 0006 SETMBR R0 K2 R4
0x80000000, // 0007 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: status_error_received
********************************************************************/
be_local_closure(Matter_IM_Message_status_error_received, /* name */
be_nested_proto(
2, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
0, /* has constants */
NULL, /* no const */
be_str_weak(status_error_received),
&be_const_str_solidified,
( &(const binstruction[ 1]) { /* code */
0x80000000, // 0000 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: ack_received
********************************************************************/
be_local_closure(Matter_IM_Message_ack_received, /* name */
be_nested_proto(
3, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
0, /* has constants */
NULL, /* no const */
be_str_weak(ack_received),
&be_const_str_solidified,
( &(const binstruction[ 2]) { /* code */
0x50080000, // 0000 LDBOOL R2 0 0
0x80040400, // 0001 RET 1 R2
})
)
);
/*******************************************************************/
/******************************************************************** /********************************************************************
** Solidified class: Matter_IM_Message ** Solidified class: Matter_IM_Message
********************************************************************/ ********************************************************************/
be_local_class(Matter_IM_Message, be_local_class(Matter_IM_Message,
3, 3,
NULL, NULL,
be_nested_map(8, be_nested_map(9,
( (struct bmapnode*) &(const bmapnode[]) { ( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(ack_received, 2), be_const_closure(Matter_IM_Message_ack_received_closure) },
{ be_const_key_weak(send, -1), be_const_closure(Matter_IM_Message_send_closure) },
{ be_const_key_weak(get_exchangeid, -1), be_const_closure(Matter_IM_Message_get_exchangeid_closure) },
{ be_const_key_weak(resp, 6), be_const_var(0) },
{ be_const_key_weak(ready, -1), be_const_var(1) },
{ be_const_key_weak(data, -1), be_const_var(2) }, { be_const_key_weak(data, -1), be_const_var(2) },
{ be_const_key_weak(get_exchangeid, -1), be_const_closure(Matter_IM_Message_get_exchangeid_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_IM_Message_init_closure) }, { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Message_init_closure) },
{ be_const_key_weak(ack_error, 1), be_const_closure(Matter_IM_Message_ack_error_closure) }, { be_const_key_weak(resp, -1), be_const_var(0) },
{ be_const_key_weak(send, 0), be_const_closure(Matter_IM_Message_send_closure) },
{ be_const_key_weak(ready, 2), be_const_var(1) },
{ be_const_key_weak(status_ok_received, 5), be_const_closure(Matter_IM_Message_status_ok_received_closure) },
{ be_const_key_weak(status_error_received, -1), be_const_closure(Matter_IM_Message_status_error_received_closure) },
{ be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_Message_ack_received_closure) },
})), })),
be_str_weak(Matter_IM_Message) be_str_weak(Matter_IM_Message)
); );
@ -580,10 +606,10 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
/* K11 */ be_nested_str_weak(log), /* K11 */ be_nested_str_weak(log),
/* K12 */ be_nested_str_weak(format), /* K12 */ be_nested_str_weak(format),
/* K13 */ be_nested_str_weak(MTR_X3A_X20elements_X3D_X25i_X20msg_sz_X3D_X25i_X20total_X3D_X25i), /* K13 */ be_nested_str_weak(MTR_X3A_X20elements_X3D_X25i_X20msg_sz_X3D_X25i_X20total_X3D_X25i),
/* K14 */ be_const_int(3), /* K14 */ be_const_int(2147483647),
/* K15 */ be_const_int(2147483647), /* K15 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20next_chunk_X20exch_X3D_X25i),
/* K16 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20next_chunk_X20exch_X3D_X25i), /* K16 */ be_nested_str_weak(get_exchangeid),
/* K17 */ be_nested_str_weak(get_exchangeid), /* K17 */ be_const_int(3),
/* K18 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20first_chunk_X20exch_X3D_X25i), /* K18 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20first_chunk_X20exch_X3D_X25i),
/* K19 */ be_nested_str_weak(MTR_X3A_X20sending_X20TLV), /* K19 */ be_nested_str_weak(MTR_X3A_X20sending_X20TLV),
/* K20 */ be_nested_str_weak(encode), /* K20 */ be_nested_str_weak(encode),
@ -653,9 +679,9 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0x88400905, // 0031 GETMBR R16 R4 K5 0x88400905, // 0031 GETMBR R16 R4 K5
0x7C3C0200, // 0032 CALL R15 1 0x7C3C0200, // 0032 CALL R15 1
0x7C280A00, // 0033 CALL R10 5 0x7C280A00, // 0033 CALL R10 5
0x582C000E, // 0034 LDCONST R11 K14 0x542E0003, // 0034 LDINT R11 4
0x7C200600, // 0035 CALL R8 3 0x7C200600, // 0035 CALL R8 3
0x40200F0F, // 0036 CONNECT R8 R7 K15 0x40200F0E, // 0036 CONNECT R8 R7 K14
0x88240905, // 0037 GETMBR R9 R4 K5 0x88240905, // 0037 GETMBR R9 R4 K5
0x94201208, // 0038 GETIDX R8 R9 R8 0x94201208, // 0038 GETIDX R8 R9 R8
0x04280F08, // 0039 SUB R10 R7 K8 0x04280F08, // 0039 SUB R10 R7 K8
@ -672,11 +698,11 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0xB82A1400, // 0044 GETNGBL R10 K10 0xB82A1400, // 0044 GETNGBL R10 K10
0x8C28150B, // 0045 GETMET R10 R10 K11 0x8C28150B, // 0045 GETMET R10 R10 K11
0x8C30050C, // 0046 GETMET R12 R2 K12 0x8C30050C, // 0046 GETMET R12 R2 K12
0x58380010, // 0047 LDCONST R14 K16 0x5838000F, // 0047 LDCONST R14 K15
0x8C3C0111, // 0048 GETMET R15 R0 K17 0x8C3C0110, // 0048 GETMET R15 R0 K16
0x7C3C0200, // 0049 CALL R15 1 0x7C3C0200, // 0049 CALL R15 1
0x7C300600, // 004A CALL R12 3 0x7C300600, // 004A CALL R12 3
0x5834000E, // 004B LDCONST R13 K14 0x58340011, // 004B LDCONST R13 K17
0x7C280600, // 004C CALL R10 3 0x7C280600, // 004C CALL R10 3
0x88240903, // 004D GETMBR R9 R4 K3 0x88240903, // 004D GETMBR R9 R4 K3
0x78260012, // 004E JMPF R9 #0062 0x78260012, // 004E JMPF R9 #0062
@ -686,10 +712,10 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0x8C24130B, // 0052 GETMET R9 R9 K11 0x8C24130B, // 0052 GETMET R9 R9 K11
0x8C2C050C, // 0053 GETMET R11 R2 K12 0x8C2C050C, // 0053 GETMET R11 R2 K12
0x58340012, // 0054 LDCONST R13 K18 0x58340012, // 0054 LDCONST R13 K18
0x8C380111, // 0055 GETMET R14 R0 K17 0x8C380110, // 0055 GETMET R14 R0 K16
0x7C380200, // 0056 CALL R14 1 0x7C380200, // 0056 CALL R14 1
0x7C2C0600, // 0057 CALL R11 3 0x7C2C0600, // 0057 CALL R11 3
0x5830000E, // 0058 LDCONST R12 K14 0x58300011, // 0058 LDCONST R12 K17
0x7C240600, // 0059 CALL R9 3 0x7C240600, // 0059 CALL R9 3
0xB8261400, // 005A GETNGBL R9 K10 0xB8261400, // 005A GETNGBL R9 K10
0x8C24130B, // 005B GETMET R9 R9 K11 0x8C24130B, // 005B GETMET R9 R9 K11
@ -697,7 +723,7 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0x5C300800, // 005D MOVE R12 R4 0x5C300800, // 005D MOVE R12 R4
0x7C2C0200, // 005E CALL R11 1 0x7C2C0200, // 005E CALL R11 1
0x002E260B, // 005F ADD R11 K19 R11 0x002E260B, // 005F ADD R11 K19 R11
0x5830000E, // 0060 LDCONST R12 K14 0x58300011, // 0060 LDCONST R12 K17
0x7C240600, // 0061 CALL R9 3 0x7C240600, // 0061 CALL R9 3
0x8C240714, // 0062 GETMET R9 R3 K20 0x8C240714, // 0062 GETMET R9 R3 K20
0x882C0102, // 0063 GETMBR R11 R0 K2 0x882C0102, // 0063 GETMBR R11 R0 K2
@ -726,7 +752,7 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0x5C300800, // 007A MOVE R12 R4 0x5C300800, // 007A MOVE R12 R4
0x7C2C0200, // 007B CALL R11 1 0x7C2C0200, // 007B CALL R11 1
0x002E360B, // 007C ADD R11 K27 R11 0x002E360B, // 007C ADD R11 K27 R11
0x5830000E, // 007D LDCONST R12 K14 0x58300011, // 007D LDCONST R12 K17
0x7C240600, // 007E CALL R9 3 0x7C240600, // 007E CALL R9 3
0xB8261400, // 007F GETNGBL R9 K10 0xB8261400, // 007F GETNGBL R9 K10
0x8C24131D, // 0080 GETMET R9 R9 K29 0x8C24131D, // 0080 GETMET R9 R9 K29
@ -822,36 +848,6 @@ void be_load_Matter_IM_ReportData_class(bvm *vm) {
extern const bclass be_class_Matter_IM_ReportDataSubscribed; extern const bclass be_class_Matter_IM_ReportDataSubscribed;
/********************************************************************
** Solidified function: ack_error
********************************************************************/
be_local_closure(Matter_IM_ReportDataSubscribed_ack_error, /* name */
be_nested_proto(
4, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(sub),
/* K1 */ be_nested_str_weak(remove_self),
}),
be_str_weak(ack_error),
&be_const_str_solidified,
( &(const binstruction[ 4]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
0x8C080501, // 0001 GETMET R2 R2 K1
0x7C080200, // 0002 CALL R2 1
0x80000000, // 0003 RET 0
})
)
);
/*******************************************************************/
/******************************************************************** /********************************************************************
** Solidified function: send ** Solidified function: send
********************************************************************/ ********************************************************************/
@ -883,7 +879,7 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send, /* name */
}), }),
be_str_weak(send), be_str_weak(send),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[48]) { /* code */ ( &(const binstruction[55]) { /* code */
0x6008000C, // 0000 GETGBL R2 G12 0x6008000C, // 0000 GETGBL R2 G12
0x880C0100, // 0001 GETMBR R3 R0 K0 0x880C0100, // 0001 GETMBR R3 R0 K0
0x880C0701, // 0002 GETMBR R3 R3 K1 0x880C0701, // 0002 GETMBR R3 R3 K1
@ -922,16 +918,53 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send, /* name */
0x7C0C0A00, // 0023 CALL R3 5 0x7C0C0A00, // 0023 CALL R3 5
0x500C0200, // 0024 LDBOOL R3 1 0 0x500C0200, // 0024 LDBOOL R3 1 0
0x80040600, // 0025 RET 1 R3 0x80040600, // 0025 RET 1 R3
0x70020007, // 0026 JMP #002F 0x7002000E, // 0026 JMP #0036
0x60080003, // 0027 GETGBL R2 G3 0x88080103, // 0027 GETMBR R2 R0 K3
0x5C0C0000, // 0028 MOVE R3 R0 0x780A000A, // 0028 JMPF R2 #0034
0x7C080200, // 0029 CALL R2 1 0x60080003, // 0029 GETGBL R2 G3
0x8C080504, // 002A GETMET R2 R2 K4 0x5C0C0000, // 002A MOVE R3 R0
0x5C100200, // 002B MOVE R4 R1 0x7C080200, // 002B CALL R2 1
0x7C080400, // 002C CALL R2 2 0x8C080504, // 002C GETMET R2 R2 K4
0x50080200, // 002D LDBOOL R2 1 0 0x5C100200, // 002D MOVE R4 R1
0x80040400, // 002E RET 1 R2 0x7C080400, // 002E CALL R2 2
0x80000000, // 002F RET 0 0x50080000, // 002F LDBOOL R2 0 0
0x90020602, // 0030 SETMBR R0 K3 R2
0x50080000, // 0031 LDBOOL R2 0 0
0x80040400, // 0032 RET 1 R2
0x70020001, // 0033 JMP #0036
0x50080200, // 0034 LDBOOL R2 1 0
0x80040400, // 0035 RET 1 R2
0x80000000, // 0036 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: status_error_received
********************************************************************/
be_local_closure(Matter_IM_ReportDataSubscribed_status_error_received, /* name */
be_nested_proto(
4, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(sub),
/* K1 */ be_nested_str_weak(remove_self),
}),
be_str_weak(status_error_received),
&be_const_str_solidified,
( &(const binstruction[ 4]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
0x8C080501, // 0001 GETMET R2 R2 K1
0x7C080200, // 0002 CALL R2 1
0x80000000, // 0003 RET 0
}) })
) )
); );
@ -942,6 +975,39 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send, /* name */
** Solidified function: ack_received ** Solidified function: ack_received
********************************************************************/ ********************************************************************/
be_local_closure(Matter_IM_ReportDataSubscribed_ack_received, /* name */ be_local_closure(Matter_IM_ReportDataSubscribed_ack_received, /* name */
be_nested_proto(
3, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
/* K0 */ be_nested_str_weak(report_data_phase),
}),
be_str_weak(ack_received),
&be_const_str_solidified,
( &(const binstruction[ 8]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
0x740A0002, // 0001 JMPT R2 #0005
0x50080200, // 0002 LDBOOL R2 1 0
0x80040400, // 0003 RET 1 R2
0x70020001, // 0004 JMP #0007
0x50080000, // 0005 LDBOOL R2 0 0
0x80040400, // 0006 RET 1 R2
0x80000000, // 0007 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: status_ok_received
********************************************************************/
be_local_closure(Matter_IM_ReportDataSubscribed_status_ok_received, /* name */
be_nested_proto( be_nested_proto(
5, /* nstack */ 5, /* nstack */
2, /* argc */ 2, /* argc */
@ -953,9 +1019,9 @@ be_local_closure(Matter_IM_ReportDataSubscribed_ack_received, /* name */
1, /* has constants */ 1, /* has constants */
( &(const bvalue[ 2]) { /* constants */ ( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(report_data_phase), /* K0 */ be_nested_str_weak(report_data_phase),
/* K1 */ be_nested_str_weak(ack_received), /* K1 */ be_nested_str_weak(status_ok_received),
}), }),
be_str_weak(ack_received), be_str_weak(status_ok_received),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[19]) { /* code */ ( &(const binstruction[19]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0 0x88080100, // 0000 GETMBR R2 R0 K0
@ -1048,14 +1114,15 @@ extern const bclass be_class_Matter_IM_ReportData;
be_local_class(Matter_IM_ReportDataSubscribed, be_local_class(Matter_IM_ReportDataSubscribed,
2, 2,
&be_class_Matter_IM_ReportData, &be_class_Matter_IM_ReportData,
be_nested_map(6, be_nested_map(7,
( (struct bmapnode*) &(const bmapnode[]) { ( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(sub, 5), be_const_var(0) }, { be_const_key_weak(init, 1), be_const_closure(Matter_IM_ReportDataSubscribed_init_closure) },
{ be_const_key_weak(ack_error, 0), be_const_closure(Matter_IM_ReportDataSubscribed_ack_error_closure) }, { be_const_key_weak(status_ok_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_status_ok_received_closure) },
{ be_const_key_weak(send, 4), be_const_closure(Matter_IM_ReportDataSubscribed_send_closure) },
{ be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_ack_received_closure) }, { be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_ack_received_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_IM_ReportDataSubscribed_init_closure) }, { be_const_key_weak(sub, 6), be_const_var(0) },
{ be_const_key_weak(status_error_received, 0), be_const_closure(Matter_IM_ReportDataSubscribed_status_error_received_closure) },
{ be_const_key_weak(report_data_phase, -1), be_const_var(1) }, { be_const_key_weak(report_data_phase, -1), be_const_var(1) },
{ be_const_key_weak(send, -1), be_const_closure(Matter_IM_ReportDataSubscribed_send_closure) },
})), })),
be_str_weak(Matter_IM_ReportDataSubscribed) be_str_weak(Matter_IM_ReportDataSubscribed)
); );

View File

@ -11,7 +11,7 @@ extern const bclass be_class_Matter_IM_Subscription;
********************************************************************/ ********************************************************************/
be_local_closure(Matter_IM_Subscription_remove_self, /* name */ be_local_closure(Matter_IM_Subscription_remove_self, /* name */
be_nested_proto( be_nested_proto(
4, /* nstack */ 5, /* nstack */
1, /* argc */ 1, /* argc */
2, /* varg */ 2, /* varg */
0, /* has upvals */ 0, /* has upvals */
@ -19,18 +19,29 @@ be_local_closure(Matter_IM_Subscription_remove_self, /* name */
0, /* has sup protos */ 0, /* has sup protos */
NULL, /* no sub protos */ NULL, /* no sub protos */
1, /* has constants */ 1, /* has constants */
( &(const bvalue[ 2]) { /* constants */ ( &(const bvalue[ 6]) { /* constants */
/* K0 */ be_nested_str_weak(subs), /* K0 */ be_nested_str_weak(tasmota),
/* K1 */ be_nested_str_weak(remove_sub), /* K1 */ be_nested_str_weak(log),
/* K2 */ be_nested_str_weak(MTR_X3A_X20Remove_Sub_X20sub_id_X3D),
/* K3 */ be_nested_str_weak(subscription_id),
/* K4 */ be_nested_str_weak(subs),
/* K5 */ be_nested_str_weak(remove_sub),
}), }),
be_str_weak(remove_self), be_str_weak(remove_self),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[ 5]) { /* code */ ( &(const binstruction[12]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0 0xB8060000, // 0000 GETNGBL R1 K0
0x8C040301, // 0001 GETMET R1 R1 K1 0x8C040301, // 0001 GETMET R1 R1 K1
0x5C0C0000, // 0002 MOVE R3 R0 0x600C0008, // 0002 GETGBL R3 G8
0x7C040400, // 0003 CALL R1 2 0x88100103, // 0003 GETMBR R4 R0 K3
0x80000000, // 0004 RET 0 0x7C0C0200, // 0004 CALL R3 1
0x000E0403, // 0005 ADD R3 K2 R3
0x7C040400, // 0006 CALL R1 2
0x88040104, // 0007 GETMBR R1 R0 K4
0x8C040305, // 0008 GETMET R1 R1 K5
0x5C0C0000, // 0009 MOVE R3 R0
0x7C040400, // 000A CALL R1 2
0x80000000, // 000B RET 0
}) })
) )
); );

View File

@ -227,7 +227,7 @@ be_local_closure(Matter_Frame_debug, /* name */
0, /* has sup protos */ 0, /* has sup protos */
NULL, /* no sub protos */ NULL, /* no sub protos */
1, /* has constants */ 1, /* has constants */
( &(const bvalue[ 9]) { /* constants */ ( &(const bvalue[10]) { /* constants */
/* K0 */ be_nested_str_weak(matter), /* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(Frame), /* K1 */ be_nested_str_weak(Frame),
/* K2 */ be_nested_str_weak(message_handler), /* K2 */ be_nested_str_weak(message_handler),
@ -237,6 +237,7 @@ be_local_closure(Matter_Frame_debug, /* name */
/* K6 */ be_nested_str_weak(log), /* K6 */ be_nested_str_weak(log),
/* K7 */ be_nested_str_weak(MTR_X3A_X20sending_X20decode_X3A_X20), /* K7 */ be_nested_str_weak(MTR_X3A_X20sending_X20decode_X3A_X20),
/* K8 */ be_nested_str_weak(inspect), /* K8 */ be_nested_str_weak(inspect),
/* K9 */ be_const_int(3),
}), }),
be_str_weak(debug), be_str_weak(debug),
&be_const_str_solidified, &be_const_str_solidified,
@ -257,7 +258,7 @@ be_local_closure(Matter_Frame_debug, /* name */
0x5C1C0400, // 000D MOVE R7 R2 0x5C1C0400, // 000D MOVE R7 R2
0x7C140400, // 000E CALL R5 2 0x7C140400, // 000E CALL R5 2
0x00160E05, // 000F ADD R5 K7 R5 0x00160E05, // 000F ADD R5 K7 R5
0x541A0003, // 0010 LDINT R6 4 0x58180009, // 0010 LDCONST R6 K9
0x7C0C0600, // 0011 CALL R3 3 0x7C0C0600, // 0011 CALL R3 3
0x80000000, // 0012 RET 0 0x80000000, // 0012 RET 0
}) })

View File

@ -192,7 +192,7 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0, /* has sup protos */ 0, /* has sup protos */
NULL, /* no sub protos */ NULL, /* no sub protos */
1, /* has constants */ 1, /* has constants */
( &(const bvalue[70]) { /* constants */ ( &(const bvalue[71]) { /* constants */
/* K0 */ be_nested_str_weak(string), /* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(tasmota), /* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(log), /* K2 */ be_nested_str_weak(log),
@ -250,26 +250,27 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
/* K54 */ be_nested_str_weak(exchange_id), /* K54 */ be_nested_str_weak(exchange_id),
/* K55 */ be_nested_str_weak(MTR_X3A_X20PROTOCOL_ID_SECURE_CHANNEL_X20), /* K55 */ be_nested_str_weak(MTR_X3A_X20PROTOCOL_ID_SECURE_CHANNEL_X20),
/* K56 */ be_nested_str_weak(im), /* K56 */ be_nested_str_weak(im),
/* K57 */ be_nested_str_weak(send_enqueued), /* K57 */ be_nested_str_weak(process_incoming_ack),
/* K58 */ be_nested_str_weak(x_flag_r), /* K58 */ be_nested_str_weak(send_enqueued),
/* K59 */ be_nested_str_weak(build_standalone_ack), /* K59 */ be_nested_str_weak(x_flag_r),
/* K60 */ be_nested_str_weak(encode), /* K60 */ be_nested_str_weak(build_standalone_ack),
/* K61 */ be_nested_str_weak(encrypt), /* K61 */ be_nested_str_weak(encode),
/* K62 */ be_nested_str_weak(send_response), /* K62 */ be_nested_str_weak(encrypt),
/* K63 */ be_nested_str_weak(remote_ip), /* K63 */ be_nested_str_weak(send_response),
/* K64 */ be_nested_str_weak(remote_port), /* K64 */ be_nested_str_weak(remote_ip),
/* K65 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A), /* K65 */ be_nested_str_weak(remote_port),
/* K66 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20), /* K66 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
/* K67 */ be_nested_str_weak(_X3B), /* K67 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
/* K68 */ be_nested_str_weak(debug), /* K68 */ be_nested_str_weak(_X3B),
/* K69 */ be_nested_str_weak(traceback), /* K69 */ be_nested_str_weak(debug),
/* K70 */ be_nested_str_weak(traceback),
}), }),
be_str_weak(msg_received), be_str_weak(msg_received),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[317]) { /* code */ ( &(const binstruction[328]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0 0xA4120000, // 0000 IMPORT R4 K0
0x50140000, // 0001 LDBOOL R5 0 0 0x50140000, // 0001 LDBOOL R5 0 0
0xA8020123, // 0002 EXBLK 0 #0127 0xA802012E, // 0002 EXBLK 0 #0132
0xB81A0200, // 0003 GETNGBL R6 K1 0xB81A0200, // 0003 GETNGBL R6 K1
0x8C180D02, // 0004 GETMET R6 R6 K2 0x8C180D02, // 0004 GETMET R6 R6 K2
0x8C200304, // 0005 GETMET R8 R1 K4 0x8C200304, // 0005 GETMET R8 R1 K4
@ -293,10 +294,10 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x80041000, // 0017 RET 1 R8 0x80041000, // 0017 RET 1 R8
0x88200D08, // 0018 GETMBR R8 R6 K8 0x88200D08, // 0018 GETMBR R8 R6 K8
0x1C201109, // 0019 EQ R8 R8 K9 0x1C201109, // 0019 EQ R8 R8 K9
0x7822005C, // 001A JMPF R8 #0078 0x7822005A, // 001A JMPF R8 #0076
0x88200D0A, // 001B GETMBR R8 R6 K10 0x88200D0A, // 001B GETMBR R8 R6 K10
0x1C201109, // 001C EQ R8 R8 K9 0x1C201109, // 001C EQ R8 R8 K9
0x78220059, // 001D JMPF R8 #0078 0x78220057, // 001D JMPF R8 #0076
0x8820010B, // 001E GETMBR R8 R0 K11 0x8820010B, // 001E GETMBR R8 R0 K11
0x8820110C, // 001F GETMBR R8 R8 K12 0x8820110C, // 001F GETMBR R8 R8 K12
0x8C20110D, // 0020 GETMET R8 R8 K13 0x8C20110D, // 0020 GETMET R8 R8 K13
@ -380,210 +381,221 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x88240124, // 006E GETMBR R9 R0 K36 0x88240124, // 006E GETMBR R9 R0 K36
0x8C241325, // 006F GETMET R9 R9 K37 0x8C241325, // 006F GETMET R9 R9 K37
0x5C2C0C00, // 0070 MOVE R11 R6 0x5C2C0C00, // 0070 MOVE R11 R6
0x5C300400, // 0071 MOVE R12 R2 0x7C240400, // 0071 CALL R9 2
0x5C340600, // 0072 MOVE R13 R3 0x50240200, // 0072 LDBOOL R9 1 0
0x7C240800, // 0073 CALL R9 4 0xA8040001, // 0073 EXBLK 1 1
0x50240200, // 0074 LDBOOL R9 1 0 0x80041200, // 0074 RET 1 R9
0xA8040001, // 0075 EXBLK 1 1 0x700200B7, // 0075 JMP #012E
0x80041200, // 0076 RET 1 R9 0xB8220200, // 0076 GETNGBL R8 K1
0x700200AA, // 0077 JMP #0123 0x8C201102, // 0077 GETMET R8 R8 K2
0xB8220200, // 0078 GETNGBL R8 K1 0x8C280919, // 0078 GETMET R10 R4 K25
0x8C201102, // 0079 GETMET R8 R8 K2 0x58300026, // 0079 LDCONST R12 K38
0x8C280919, // 007A GETMET R10 R4 K25 0x88340D08, // 007A GETMBR R13 R6 K8
0x58300026, // 007B LDCONST R12 K38 0x88380D18, // 007B GETMBR R14 R6 K24
0x88340D08, // 007C GETMBR R13 R6 K8 0x7C280800, // 007C CALL R10 4
0x88380D18, // 007D GETMBR R14 R6 K24 0x582C0011, // 007D LDCONST R11 K17
0x7C280800, // 007E CALL R10 4 0x7C200600, // 007E CALL R8 3
0x582C0011, // 007F LDCONST R11 K17 0x8820010B, // 007F GETMBR R8 R0 K11
0x7C200600, // 0080 CALL R8 3 0x8820110C, // 0080 GETMBR R8 R8 K12
0x8820010B, // 0081 GETMBR R8 R0 K11 0x8C201127, // 0081 GETMET R8 R8 K39
0x8820110C, // 0082 GETMBR R8 R8 K12 0x88280D08, // 0082 GETMBR R10 R6 K8
0x8C201127, // 0083 GETMET R8 R8 K39 0x7C200400, // 0083 CALL R8 2
0x88280D08, // 0084 GETMBR R10 R6 K8 0x4C240000, // 0084 LDNIL R9
0x7C200400, // 0085 CALL R8 2 0x1C241009, // 0085 EQ R9 R8 R9
0x4C240000, // 0086 LDNIL R9 0x78260013, // 0086 JMPF R9 #009B
0x1C241009, // 0087 EQ R9 R8 R9 0xB8260200, // 0087 GETNGBL R9 K1
0x78260013, // 0088 JMPF R9 #009D 0x8C241302, // 0088 GETMET R9 R9 K2
0xB8260200, // 0089 GETNGBL R9 K1 0x602C0008, // 0089 GETGBL R11 G8
0x8C241302, // 008A GETMET R9 R9 K2 0x88300D08, // 008A GETMBR R12 R6 K8
0x602C0008, // 008B GETGBL R11 G8 0x7C2C0200, // 008B CALL R11 1
0x88300D08, // 008C GETMBR R12 R6 K8 0x002E500B, // 008C ADD R11 K40 R11
0x7C2C0200, // 008D CALL R11 1 0x58300011, // 008D LDCONST R12 K17
0x002E500B, // 008E ADD R11 K40 R11 0x7C240600, // 008E CALL R9 3
0x58300011, // 008F LDCONST R12 K17 0xB8260200, // 008F GETNGBL R9 K1
0x7C240600, // 0090 CALL R9 3 0x8C241302, // 0090 GETMET R9 R9 K2
0xB8260200, // 0091 GETNGBL R9 K1 0xB82E0A00, // 0091 GETNGBL R11 K5
0x8C241302, // 0092 GETMET R9 R9 K2 0x8C2C172A, // 0092 GETMET R11 R11 K42
0xB82E0A00, // 0093 GETNGBL R11 K5 0x5C340C00, // 0093 MOVE R13 R6
0x8C2C172A, // 0094 GETMET R11 R11 K42 0x7C2C0400, // 0094 CALL R11 2
0x5C340C00, // 0095 MOVE R13 R6 0x002E520B, // 0095 ADD R11 K41 R11
0x7C2C0400, // 0096 CALL R11 2 0x58300011, // 0096 LDCONST R12 K17
0x002E520B, // 0097 ADD R11 K41 R11 0x7C240600, // 0097 CALL R9 3
0x58300011, // 0098 LDCONST R12 K17 0x50240000, // 0098 LDBOOL R9 0 0
0x7C240600, // 0099 CALL R9 3 0xA8040001, // 0099 EXBLK 1 1
0x50240000, // 009A LDBOOL R9 0 0 0x80041200, // 009A RET 1 R9
0xA8040001, // 009B EXBLK 1 1 0x780A0000, // 009B JMPF R2 #009D
0x80041200, // 009C RET 1 R9 0x90222402, // 009C SETMBR R8 K18 R2
0x780A0000, // 009D JMPF R2 #009F 0x780E0000, // 009D JMPF R3 #009F
0x90222402, // 009E SETMBR R8 K18 R2 0x90222603, // 009E SETMBR R8 K19 R3
0x780E0000, // 009F JMPF R3 #00A1 0x90222800, // 009F SETMBR R8 K20 R0
0x90222603, // 00A0 SETMBR R8 K19 R3 0x901A2A08, // 00A0 SETMBR R6 K21 R8
0x90222800, // 00A1 SETMBR R8 K20 R0 0x88241116, // 00A1 GETMBR R9 R8 K22
0x901A2A08, // 00A2 SETMBR R6 K21 R8 0x8C241317, // 00A2 GETMET R9 R9 K23
0x88241116, // 00A3 GETMBR R9 R8 K22 0x882C0D18, // 00A3 GETMBR R11 R6 K24
0x8C241317, // 00A4 GETMET R9 R9 K23 0x50300200, // 00A4 LDBOOL R12 1 0
0x882C0D18, // 00A5 GETMBR R11 R6 K24 0x7C240600, // 00A5 CALL R9 3
0x50300200, // 00A6 LDBOOL R12 1 0 0x74260011, // 00A6 JMPT R9 #00B9
0x7C240600, // 00A7 CALL R9 3 0xB8260200, // 00A7 GETNGBL R9 K1
0x74260011, // 00A8 JMPT R9 #00BB 0x8C241302, // 00A8 GETMET R9 R9 K2
0xB8260200, // 00A9 GETNGBL R9 K1 0x602C0008, // 00A9 GETGBL R11 G8
0x8C241302, // 00AA GETMET R9 R9 K2 0x88300D18, // 00AA GETMBR R12 R6 K24
0x602C0008, // 00AB GETGBL R11 G8 0x7C2C0200, // 00AB CALL R11 1
0x88300D18, // 00AC GETMBR R12 R6 K24 0x002E560B, // 00AC ADD R11 K43 R11
0x7C2C0200, // 00AD CALL R11 1 0x002C172C, // 00AD ADD R11 R11 K44
0x002E560B, // 00AE ADD R11 K43 R11 0x60300008, // 00AE GETGBL R12 G8
0x002C172C, // 00AF ADD R11 R11 K44 0x88341116, // 00AF GETMBR R13 R8 K22
0x60300008, // 00B0 GETGBL R12 G8 0x8C341B1B, // 00B0 GETMET R13 R13 K27
0x88341116, // 00B1 GETMBR R13 R8 K22 0x7C340200, // 00B1 CALL R13 1
0x8C341B1B, // 00B2 GETMET R13 R13 K27 0x7C300200, // 00B2 CALL R12 1
0x7C340200, // 00B3 CALL R13 1 0x002C160C, // 00B3 ADD R11 R11 R12
0x7C300200, // 00B4 CALL R12 1 0x58300011, // 00B4 LDCONST R12 K17
0x002C160C, // 00B5 ADD R11 R11 R12 0x7C240600, // 00B5 CALL R9 3
0x58300011, // 00B6 LDCONST R12 K17 0x50240000, // 00B6 LDBOOL R9 0 0
0x7C240600, // 00B7 CALL R9 3 0xA8040001, // 00B7 EXBLK 1 1
0x50240000, // 00B8 LDBOOL R9 0 0 0x80041200, // 00B8 RET 1 R9
0xA8040001, // 00B9 EXBLK 1 1 0x8C240D2D, // 00B9 GETMET R9 R6 K45
0x80041200, // 00BA RET 1 R9 0x7C240200, // 00BA CALL R9 1
0x8C240D2D, // 00BB GETMET R9 R6 K45 0x5C281200, // 00BB MOVE R10 R9
0x7C240200, // 00BC CALL R9 1 0x742A0002, // 00BC JMPT R10 #00C0
0x5C281200, // 00BD MOVE R10 R9 0x50280000, // 00BD LDBOOL R10 0 0
0x742A0002, // 00BE JMPT R10 #00C2 0xA8040001, // 00BE EXBLK 1 1
0x50280000, // 00BF LDBOOL R10 0 0 0x80041400, // 00BF RET 1 R10
0xA8040001, // 00C0 EXBLK 1 1 0x88280D2F, // 00C0 GETMBR R10 R6 K47
0x80041400, // 00C1 RET 1 R10 0x04281530, // 00C1 SUB R10 R10 K48
0x88280D2F, // 00C2 GETMBR R10 R6 K47 0x402A120A, // 00C2 CONNECT R10 K9 R10
0x04281530, // 00C3 SUB R10 R10 K48 0x882C0D2E, // 00C3 GETMBR R11 R6 K46
0x402A120A, // 00C4 CONNECT R10 K9 R10 0x9428160A, // 00C4 GETIDX R10 R11 R10
0x882C0D2E, // 00C5 GETMBR R11 R6 K46 0x901A5C0A, // 00C5 SETMBR R6 K46 R10
0x9428160A, // 00C6 GETIDX R10 R11 R10 0x88280D2E, // 00C6 GETMBR R10 R6 K46
0x901A5C0A, // 00C7 SETMBR R6 K46 R10 0x40281409, // 00C7 CONNECT R10 R10 R9
0x88280D2E, // 00C8 GETMBR R10 R6 K46 0xB82A0200, // 00C8 GETNGBL R10 K1
0x40281409, // 00C9 CONNECT R10 R10 R9 0x8C281502, // 00C9 GETMET R10 R10 K2
0xB82A0200, // 00CA GETNGBL R10 K1 0x8C300919, // 00CA GETMET R12 R4 K25
0x8C281502, // 00CB GETMET R10 R10 K2 0x58380031, // 00CB LDCONST R14 K49
0x8C300919, // 00CC GETMET R12 R4 K25 0x883C0D2F, // 00CC GETMBR R15 R6 K47
0x58380031, // 00CD LDCONST R14 K49 0x88400D2E, // 00CD GETMBR R16 R6 K46
0x883C0D2F, // 00CE GETMBR R15 R6 K47 0x8C402104, // 00CE GETMET R16 R16 K4
0x88400D2E, // 00CF GETMBR R16 R6 K46 0x7C400200, // 00CF CALL R16 1
0x8C402104, // 00D0 GETMET R16 R16 K4 0x7C300800, // 00D0 CALL R12 4
0x7C400200, // 00D1 CALL R16 1 0x54360003, // 00D1 LDINT R13 4
0x7C300800, // 00D2 CALL R12 4 0x7C280600, // 00D2 CALL R10 3
0x58340011, // 00D3 LDCONST R13 K17 0x8C280D1C, // 00D3 GETMET R10 R6 K28
0x7C280600, // 00D4 CALL R10 3 0x7C280200, // 00D4 CALL R10 1
0x8C280D1C, // 00D5 GETMET R10 R6 K28 0xB82A0200, // 00D5 GETNGBL R10 K1
0x7C280200, // 00D6 CALL R10 1 0x8C281502, // 00D6 GETMET R10 R10 K2
0xB82A0200, // 00D7 GETNGBL R10 K1 0x60300008, // 00D7 GETGBL R12 G8
0x8C281502, // 00D8 GETMET R10 R10 K2 0x88340D33, // 00D8 GETMBR R13 R6 K51
0x60300008, // 00D9 GETGBL R12 G8 0x7C300200, // 00D9 CALL R12 1
0x88340D33, // 00DA GETMBR R13 R6 K51 0x0032640C, // 00DA ADD R12 K50 R12
0x7C300200, // 00DB CALL R12 1 0x00301934, // 00DB ADD R12 R12 K52
0x0032640C, // 00DC ADD R12 K50 R12 0x60340008, // 00DC GETGBL R13 G8
0x00301934, // 00DD ADD R12 R12 K52 0x88380D1F, // 00DD GETMBR R14 R6 K31
0x60340008, // 00DE GETGBL R13 G8 0x7C340200, // 00DE CALL R13 1
0x88380D1F, // 00DF GETMBR R14 R6 K31 0x0030180D, // 00DF ADD R12 R12 R13
0x7C340200, // 00E0 CALL R13 1 0x00301935, // 00E0 ADD R12 R12 K53
0x0030180D, // 00E1 ADD R12 R12 R13 0x60340008, // 00E1 GETGBL R13 G8
0x00301935, // 00E2 ADD R12 R12 K53 0x88380D36, // 00E2 GETMBR R14 R6 K54
0x60340008, // 00E3 GETGBL R13 G8 0x543EFFFE, // 00E3 LDINT R15 65535
0x88380D36, // 00E4 GETMBR R14 R6 K54 0x2C381C0F, // 00E4 AND R14 R14 R15
0x543EFFFE, // 00E5 LDINT R15 65535 0x7C340200, // 00E5 CALL R13 1
0x2C381C0F, // 00E6 AND R14 R14 R15 0x0030180D, // 00E6 ADD R12 R12 R13
0x7C340200, // 00E7 CALL R13 1 0x58340011, // 00E7 LDCONST R13 K17
0x0030180D, // 00E8 ADD R12 R12 R13 0x7C280600, // 00E8 CALL R10 3
0x58340011, // 00E9 LDCONST R13 K17 0x8828010B, // 00E9 GETMBR R10 R0 K11
0x7C280600, // 00EA CALL R10 3 0x8C28151D, // 00EA GETMET R10 R10 K29
0x8828010B, // 00EB GETMBR R10 R0 K11 0x88300D1E, // 00EB GETMBR R12 R6 K30
0x8C28151D, // 00EC GETMET R10 R10 K29 0x7C280400, // 00EC CALL R10 2
0x88300D1E, // 00ED GETMBR R12 R6 K30 0x88280D33, // 00ED GETMBR R10 R6 K51
0x7C280400, // 00EE CALL R10 2 0x1C2C1509, // 00EE EQ R11 R10 K9
0x88280D33, // 00EF GETMBR R10 R6 K51 0x782E0018, // 00EF JMPF R11 #0109
0x1C2C1509, // 00F0 EQ R11 R10 K9 0xB82E0200, // 00F0 GETNGBL R11 K1
0x782E000A, // 00F1 JMPF R11 #00FD 0x8C2C1702, // 00F1 GETMET R11 R11 K2
0xB82E0200, // 00F2 GETNGBL R11 K1 0xB8360A00, // 00F2 GETNGBL R13 K5
0x8C2C1702, // 00F3 GETMET R11 R11 K2 0x8C341B2A, // 00F3 GETMET R13 R13 K42
0xB8360A00, // 00F4 GETNGBL R13 K5 0x5C3C0C00, // 00F4 MOVE R15 R6
0x8C341B2A, // 00F5 GETMET R13 R13 K42 0x7C340400, // 00F5 CALL R13 2
0x5C3C0C00, // 00F6 MOVE R15 R6 0x00366E0D, // 00F6 ADD R13 K55 R13
0x7C340400, // 00F7 CALL R13 2 0x58380011, // 00F7 LDCONST R14 K17
0x00366E0D, // 00F8 ADD R13 K55 R13 0x7C2C0600, // 00F8 CALL R11 3
0x58380011, // 00F9 LDCONST R14 K17 0x882C0D1F, // 00F9 GETMBR R11 R6 K31
0x7C2C0600, // 00FA CALL R11 3 0x5432000F, // 00FA LDINT R12 16
0x50140200, // 00FB LDBOOL R5 1 0 0x1C2C160C, // 00FB EQ R11 R11 R12
0x70020025, // 00FC JMP #0123 0x782E0009, // 00FC JMPF R11 #0107
0x1C2C1530, // 00FD EQ R11 R10 K48 0x882C0138, // 00FD GETMBR R11 R0 K56
0x782E001B, // 00FE JMPF R11 #011B 0x8C2C1739, // 00FE GETMET R11 R11 K57
0x882C0138, // 00FF GETMBR R11 R0 K56 0x5C340C00, // 00FF MOVE R13 R6
0x8C2C1725, // 0100 GETMET R11 R11 K37 0x7C2C0400, // 0100 CALL R11 2
0x5C340C00, // 0101 MOVE R13 R6 0x5C141600, // 0101 MOVE R5 R11
0x5C380400, // 0102 MOVE R14 R2 0x78160003, // 0102 JMPF R5 #0107
0x5C3C0600, // 0103 MOVE R15 R3 0x882C0138, // 0103 GETMBR R11 R0 K56
0x7C2C0800, // 0104 CALL R11 4 0x8C2C173A, // 0104 GETMET R11 R11 K58
0x5C141600, // 0105 MOVE R5 R11 0x5C340000, // 0105 MOVE R13 R0
0x78160004, // 0106 JMPF R5 #010C 0x7C2C0400, // 0106 CALL R11 2
0x882C0138, // 0107 GETMBR R11 R0 K56 0x50140200, // 0107 LDBOOL R5 1 0
0x8C2C1739, // 0108 GETMET R11 R11 K57 0x70020024, // 0108 JMP #012E
0x5C340000, // 0109 MOVE R13 R0 0x1C2C1530, // 0109 EQ R11 R10 K48
0x7C2C0400, // 010A CALL R11 2 0x782E001A, // 010A JMPF R11 #0126
0x7002000D, // 010B JMP #011A 0x882C0138, // 010B GETMBR R11 R0 K56
0x882C0D3A, // 010C GETMBR R11 R6 K58 0x8C2C1725, // 010C GETMET R11 R11 K37
0x782E000B, // 010D JMPF R11 #011A 0x5C340C00, // 010D MOVE R13 R6
0x8C2C0D3B, // 010E GETMET R11 R6 K59 0x7C2C0400, // 010E CALL R11 2
0x7C2C0200, // 010F CALL R11 1 0x5C141600, // 010F MOVE R5 R11
0x8C30173C, // 0110 GETMET R12 R11 K60 0x78160004, // 0110 JMPF R5 #0116
0x7C300200, // 0111 CALL R12 1 0x882C0138, // 0111 GETMBR R11 R0 K56
0x8C30173D, // 0112 GETMET R12 R11 K61 0x8C2C173A, // 0112 GETMET R11 R11 K58
0x7C300200, // 0113 CALL R12 1 0x5C340000, // 0113 MOVE R13 R0
0x8C30013E, // 0114 GETMET R12 R0 K62 0x7C2C0400, // 0114 CALL R11 2
0x8838172E, // 0115 GETMBR R14 R11 K46 0x7002000D, // 0115 JMP #0124
0x883C173F, // 0116 GETMBR R15 R11 K63 0x882C0D3B, // 0116 GETMBR R11 R6 K59
0x88401740, // 0117 GETMBR R16 R11 K64 0x782E000B, // 0117 JMPF R11 #0124
0x88441718, // 0118 GETMBR R17 R11 K24 0x8C2C0D3C, // 0118 GETMET R11 R6 K60
0x7C300A00, // 0119 CALL R12 5 0x7C2C0200, // 0119 CALL R11 1
0x70020007, // 011A JMP #0123 0x8C30173D, // 011A GETMET R12 R11 K61
0xB82E0200, // 011B GETNGBL R11 K1 0x7C300200, // 011B CALL R12 1
0x8C2C1702, // 011C GETMET R11 R11 K2 0x8C30173E, // 011C GETMET R12 R11 K62
0x60340008, // 011D GETGBL R13 G8 0x7C300200, // 011D CALL R12 1
0x5C381400, // 011E MOVE R14 R10 0x8C30013F, // 011E GETMET R12 R0 K63
0x7C340200, // 011F CALL R13 1 0x8838172E, // 011F GETMBR R14 R11 K46
0x0036820D, // 0120 ADD R13 K65 R13 0x883C1740, // 0120 GETMBR R15 R11 K64
0x58380011, // 0121 LDCONST R14 K17 0x88401741, // 0121 GETMBR R16 R11 K65
0x7C2C0600, // 0122 CALL R11 3 0x88441718, // 0122 GETMBR R17 R11 K24
0xA8040001, // 0123 EXBLK 1 1 0x7C300A00, // 0123 CALL R12 5
0x80040A00, // 0124 RET 1 R5 0x50140200, // 0124 LDBOOL R5 1 0
0xA8040001, // 0125 EXBLK 1 1 0x70020007, // 0125 JMP #012E
0x70020014, // 0126 JMP #013C 0xB82E0200, // 0126 GETNGBL R11 K1
0xAC180002, // 0127 CATCH R6 0 2 0x8C2C1702, // 0127 GETMET R11 R11 K2
0x70020011, // 0128 JMP #013B 0x60340008, // 0128 GETGBL R13 G8
0xB8220200, // 0129 GETNGBL R8 K1 0x5C381400, // 0129 MOVE R14 R10
0x8C201102, // 012A GETMET R8 R8 K2 0x7C340200, // 012A CALL R13 1
0x60280008, // 012B GETGBL R10 G8 0x0036840D, // 012B ADD R13 K66 R13
0x5C2C0C00, // 012C MOVE R11 R6 0x58380011, // 012C LDCONST R14 K17
0x7C280200, // 012D CALL R10 1 0x7C2C0600, // 012D CALL R11 3
0x002A840A, // 012E ADD R10 K66 R10 0xA8040001, // 012E EXBLK 1 1
0x00281543, // 012F ADD R10 R10 K67 0x80040A00, // 012F RET 1 R5
0x602C0008, // 0130 GETGBL R11 G8 0xA8040001, // 0130 EXBLK 1 1
0x5C300E00, // 0131 MOVE R12 R7 0x70020014, // 0131 JMP #0147
0x7C2C0200, // 0132 CALL R11 1 0xAC180002, // 0132 CATCH R6 0 2
0x0028140B, // 0133 ADD R10 R10 R11 0x70020011, // 0133 JMP #0146
0x7C200400, // 0134 CALL R8 2 0xB8220200, // 0134 GETNGBL R8 K1
0xA4228800, // 0135 IMPORT R8 K68 0x8C201102, // 0135 GETMET R8 R8 K2
0x8C241145, // 0136 GETMET R9 R8 K69 0x60280008, // 0136 GETGBL R10 G8
0x7C240200, // 0137 CALL R9 1 0x5C2C0C00, // 0137 MOVE R11 R6
0x50240000, // 0138 LDBOOL R9 0 0 0x7C280200, // 0138 CALL R10 1
0x80041200, // 0139 RET 1 R9 0x002A860A, // 0139 ADD R10 K67 R10
0x70020000, // 013A JMP #013C 0x00281544, // 013A ADD R10 R10 K68
0xB0080000, // 013B RAISE 2 R0 R0 0x602C0008, // 013B GETGBL R11 G8
0x80000000, // 013C RET 0 0x5C300E00, // 013C MOVE R12 R7
0x7C2C0200, // 013D CALL R11 1
0x0028140B, // 013E ADD R10 R10 R11
0x7C200400, // 013F CALL R8 2
0xA4228A00, // 0140 IMPORT R8 K69
0x8C241146, // 0141 GETMET R9 R8 K70
0x7C240200, // 0142 CALL R9 1
0x50240000, // 0143 LDBOOL R9 0 0
0x80041200, // 0144 RET 1 R9
0x70020000, // 0145 JMP #0147
0xB0080000, // 0146 RAISE 2 R0 R0
0x80000000, // 0147 RET 0
}) })
) )
); );

View File

@ -347,7 +347,7 @@ be_local_closure(Matter_UDPServer_init, /* name */
********************************************************************/ ********************************************************************/
be_local_closure(Matter_UDPServer_resend_packets, /* name */ be_local_closure(Matter_UDPServer_resend_packets, /* name */
be_nested_proto( be_nested_proto(
11, /* nstack */ 12, /* nstack */
1, /* argc */ 1, /* argc */
2, /* varg */ 2, /* varg */
0, /* has upvals */ 0, /* has upvals */
@ -374,7 +374,7 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
/* K15 */ be_nested_str_weak(string), /* K15 */ be_nested_str_weak(string),
/* K16 */ be_nested_str_weak(remove), /* K16 */ be_nested_str_weak(remove),
/* K17 */ be_nested_str_weak(format), /* K17 */ be_nested_str_weak(format),
/* K18 */ be_nested_str_weak(MTR_X3A_X20target_X20unreachable_X20_X27_X5B_X25s_X5D_X3A_X25i_X27), /* K18 */ be_nested_str_weak(MTR_X3A_X20target_X20unreachable_X20_X27_X5B_X25s_X5D_X3A_X25i_X27_X20msg_id_X3D_X25i),
/* K19 */ be_nested_str_weak(addr), /* K19 */ be_nested_str_weak(addr),
/* K20 */ be_nested_str_weak(port), /* K20 */ be_nested_str_weak(port),
/* K21 */ be_const_int(2), /* K21 */ be_const_int(2),
@ -382,18 +382,18 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
}), }),
be_str_weak(resend_packets), be_str_weak(resend_packets),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[57]) { /* code */ ( &(const binstruction[58]) { /* code */
0x60040010, // 0000 GETGBL R1 G16 0x60040010, // 0000 GETGBL R1 G16
0x88080100, // 0001 GETMBR R2 R0 K0 0x88080100, // 0001 GETMBR R2 R0 K0
0x7C040200, // 0002 CALL R1 1 0x7C040200, // 0002 CALL R1 1
0xA8020030, // 0003 EXBLK 0 #0035 0xA8020031, // 0003 EXBLK 0 #0036
0x5C080200, // 0004 MOVE R2 R1 0x5C080200, // 0004 MOVE R2 R1
0x7C080000, // 0005 CALL R2 0 0x7C080000, // 0005 CALL R2 0
0xB80E0200, // 0006 GETNGBL R3 K1 0xB80E0200, // 0006 GETNGBL R3 K1
0x8C0C0702, // 0007 GETMET R3 R3 K2 0x8C0C0702, // 0007 GETMET R3 R3 K2
0x88140503, // 0008 GETMBR R5 R2 K3 0x88140503, // 0008 GETMBR R5 R2 K3
0x7C0C0400, // 0009 CALL R3 2 0x7C0C0400, // 0009 CALL R3 2
0x780E0028, // 000A JMPF R3 #0034 0x780E0029, // 000A JMPF R3 #0035
0x880C0504, // 000B GETMBR R3 R2 K4 0x880C0504, // 000B GETMBR R3 R2 K4
0x88100105, // 000C GETMBR R4 R0 K5 0x88100105, // 000C GETMBR R4 R0 K5
0x180C0604, // 000D LE R3 R3 R4 0x180C0604, // 000D LE R3 R3 R4
@ -420,7 +420,7 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
0x880C0504, // 0022 GETMBR R3 R2 K4 0x880C0504, // 0022 GETMBR R3 R2 K4
0x000C070E, // 0023 ADD R3 R3 K14 0x000C070E, // 0023 ADD R3 R3 K14
0x900A0803, // 0024 SETMBR R2 K4 R3 0x900A0803, // 0024 SETMBR R2 K4 R3
0x7002000D, // 0025 JMP #0034 0x7002000E, // 0025 JMP #0035
0xA40E1E00, // 0026 IMPORT R3 K15 0xA40E1E00, // 0026 IMPORT R3 K15
0x88100100, // 0027 GETMBR R4 R0 K0 0x88100100, // 0027 GETMBR R4 R0 K0
0x8C100910, // 0028 GETMET R4 R4 K16 0x8C100910, // 0028 GETMET R4 R4 K16
@ -432,14 +432,15 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
0x58200012, // 002E LDCONST R8 K18 0x58200012, // 002E LDCONST R8 K18
0x88240513, // 002F GETMBR R9 R2 K19 0x88240513, // 002F GETMBR R9 R2 K19
0x88280514, // 0030 GETMBR R10 R2 K20 0x88280514, // 0030 GETMBR R10 R2 K20
0x7C180800, // 0031 CALL R6 4 0x882C0508, // 0031 GETMBR R11 R2 K8
0x581C0015, // 0032 LDCONST R7 K21 0x7C180A00, // 0032 CALL R6 5
0x7C100600, // 0033 CALL R4 3 0x581C0015, // 0033 LDCONST R7 K21
0x7001FFCE, // 0034 JMP #0004 0x7C100600, // 0034 CALL R4 3
0x58040016, // 0035 LDCONST R1 K22 0x7001FFCD, // 0035 JMP #0004
0xAC040200, // 0036 CATCH R1 1 0 0x58040016, // 0036 LDCONST R1 K22
0xB0080000, // 0037 RAISE 2 R0 R0 0xAC040200, // 0037 CATCH R1 1 0
0x80000000, // 0038 RET 0 0xB0080000, // 0038 RAISE 2 R0 R0
0x80000000, // 0039 RET 0
}) })
) )
); );