mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-23 10:46:31 +00:00
Matter fix fabric provisioning from CASE session for iOS 16.5 (#18709)
This commit is contained in:
parent
2c8f9f8631
commit
c1ec35a086
@ -23,6 +23,7 @@ All notable changes to this project will be documented in this file.
|
||||
- AIThinker webcam issues (#18652)
|
||||
- Berry `tasmota.wifi()` would wrongly report wifi as up
|
||||
- Inverted shutter now reflect status also in WEBGUI and several minor fixes to make "inverted" consistant (#18701)
|
||||
- Matter fix fabric provisioning from CASE session for iOS 16.5
|
||||
|
||||
### Removed
|
||||
|
||||
|
@ -461,15 +461,15 @@ class Matter_Commisioning_Context
|
||||
tasmota.log(string.format("MTR: +Session (%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 2)
|
||||
|
||||
tasmota.log("MTR: fabric="+matter.inspect(session._fabric), 4)
|
||||
tasmota.log("MTR: no_private_key="+session._fabric.no_private_key.tohex(), 4)
|
||||
tasmota.log("MTR: noc ="+session._fabric.noc.tohex(), 4)
|
||||
if session._fabric.get_icac()
|
||||
tasmota.log("MTR: icac ="+session._fabric.get_icac().tohex(), 4)
|
||||
tasmota.log("MTR: no_private_key="+session.get_pk().tohex(), 4)
|
||||
tasmota.log("MTR: noc ="+session.get_noc().tohex(), 4)
|
||||
if fabric.get_icac()
|
||||
tasmota.log("MTR: icac ="+fabric.get_icac().tohex(), 4)
|
||||
end
|
||||
tasmota.log("MTR: root_ca_cert ="+session._fabric.root_ca_certificate.tohex(), 4)
|
||||
tasmota.log("MTR: root_ca_cert ="+fabric.get_ca().tohex(), 4)
|
||||
|
||||
# Compute Sigma2, p.162
|
||||
session.resumption_id = crypto.random(16)
|
||||
session.resumption_id = crypto.random(16) # generate a new resumption id
|
||||
session.__responder_priv = crypto.random(32)
|
||||
session.__responder_pub = crypto.EC_P256().public_key(session.__responder_priv)
|
||||
tasmota.log("MTR: ResponderEph_priv ="+session.__responder_priv.tohex(), 4)
|
||||
@ -477,53 +477,58 @@ class Matter_Commisioning_Context
|
||||
var responderRandom = crypto.random(32)
|
||||
|
||||
session.shared_secret = crypto.EC_P256().shared_key(session.__responder_priv, sigma1.initiatorEphPubKey)
|
||||
tasmota.log("MTR: * shared_secret = " + session.shared_secret.tohex(), 4)
|
||||
|
||||
var sigma2_tbsdata = matter.TLV.Matter_TLV_struct()
|
||||
sigma2_tbsdata.add_TLV(1, matter.TLV.B2, session.get_noc())
|
||||
sigma2_tbsdata.add_TLV(2, matter.TLV.B2, session.get_icac())
|
||||
sigma2_tbsdata.add_TLV(1, matter.TLV.B2, fabric.get_noc())
|
||||
sigma2_tbsdata.add_TLV(2, matter.TLV.B2, fabric.get_icac())
|
||||
sigma2_tbsdata.add_TLV(3, matter.TLV.B2, session.__responder_pub)
|
||||
sigma2_tbsdata.add_TLV(4, matter.TLV.B2, sigma1.initiatorEphPubKey)
|
||||
|
||||
var TBSData2Signature = crypto.EC_P256().ecdsa_sign_sha256(session.get_pk(), sigma2_tbsdata.tlv2raw())
|
||||
var TBSData2Signature = crypto.EC_P256().ecdsa_sign_sha256(fabric.get_pk(), sigma2_tbsdata.tlv2raw())
|
||||
tasmota.log("****************************************", 4)
|
||||
tasmota.log("MTR: * fabric.get_pk = " + str(fabric.get_pk()), 4)
|
||||
tasmota.log("MTR: * sigma2_tbsdata = " + str(sigma2_tbsdata), 4)
|
||||
tasmota.log("MTR: * TBSData2Signature = " + TBSData2Signature.tohex(), 4)
|
||||
|
||||
var sigma2_tbedata = matter.TLV.Matter_TLV_struct()
|
||||
sigma2_tbedata.add_TLV(1, matter.TLV.B2, session.get_noc())
|
||||
sigma2_tbedata.add_TLV(2, matter.TLV.B2, session.get_icac())
|
||||
sigma2_tbedata.add_TLV(1, matter.TLV.B2, fabric.get_noc())
|
||||
sigma2_tbedata.add_TLV(2, matter.TLV.B2, fabric.get_icac())
|
||||
sigma2_tbedata.add_TLV(3, matter.TLV.B2, TBSData2Signature)
|
||||
sigma2_tbedata.add_TLV(4, matter.TLV.B2, session.resumption_id)
|
||||
|
||||
# compute TranscriptHash = Crypto_Hash(message = Msg1)
|
||||
# tasmota.log("****************************************", 4)
|
||||
tasmota.log("****************************************", 4)
|
||||
session.__Msg1 = sigma1.Msg1
|
||||
# tasmota.log("MTR: * resumptionid = " + session.resumption_id.tohex(), 4)
|
||||
# tasmota.log("MTR: * MSG1 = " + session.__Msg1.tohex(), 4)
|
||||
tasmota.log("MTR: * resumptionid = " + session.resumption_id.tohex(), 4)
|
||||
tasmota.log("MTR: * MSG1 = " + session.__Msg1.tohex(), 4)
|
||||
var TranscriptHash = crypto.SHA256().update(session.__Msg1).out()
|
||||
# tasmota.log("MTR: TranscriptHash =" + TranscriptHash.tohex(), 4)
|
||||
tasmota.log("MTR: TranscriptHash =" + TranscriptHash.tohex(), 4)
|
||||
|
||||
# Compute S2K, p.175
|
||||
var s2k_info = bytes().fromstring(self.S2K_Info)
|
||||
var s2k_salt = session.get_ipk_group_key() + responderRandom + session.__responder_pub + TranscriptHash
|
||||
var s2k_salt = fabric.get_ipk_group_key() + responderRandom + session.__responder_pub + TranscriptHash
|
||||
|
||||
var s2k = crypto.HKDF_SHA256().derive(session.shared_secret, s2k_salt, s2k_info, 16)
|
||||
# tasmota.log("MTR: * SharedSecret = " + session.shared_secret.tohex(), 4)
|
||||
# tasmota.log("MTR: * s2k_salt = " + s2k_salt.tohex(), 4)
|
||||
# tasmota.log("MTR: * s2k = " + s2k.tohex(), 4)
|
||||
tasmota.log("MTR: * SharedSecret = " + session.shared_secret.tohex(), 4)
|
||||
tasmota.log("MTR: * s2k_salt = " + s2k_salt.tohex(), 4)
|
||||
tasmota.log("MTR: * s2k = " + s2k.tohex(), 4)
|
||||
|
||||
var sigma2_tbedata_raw = sigma2_tbedata.tlv2raw()
|
||||
# tasmota.log("MTR: * TBEData2Raw = " + sigma2_tbedata_raw.tohex(), 4)
|
||||
tasmota.log("MTR: * TBEData2Raw = " + sigma2_tbedata_raw.tohex(), 4)
|
||||
# // `AES_CCM.init(secret_key:bytes(16 or 32), iv:bytes(7..13), aad:bytes(), data_len:int, tag_len:int) -> instance`
|
||||
|
||||
var aes = crypto.AES_CCM(s2k, bytes().fromstring(self.TBEData2_Nonce), bytes(), size(sigma2_tbedata_raw), 16)
|
||||
var TBEData2Encrypted = aes.encrypt(sigma2_tbedata_raw) + aes.tag()
|
||||
# tasmota.log("MTR: * TBEData2Enc = " + TBEData2Encrypted.tohex(), 4)
|
||||
# tasmota.log("****************************************", 4)
|
||||
tasmota.log("MTR: * TBEData2Enc = " + TBEData2Encrypted.tohex(), 4)
|
||||
tasmota.log("****************************************", 4)
|
||||
|
||||
var sigma2 = matter.Sigma2()
|
||||
sigma2.responderRandom = responderRandom
|
||||
sigma2.responderSessionId = session.__future_local_session_id
|
||||
sigma2.responderEphPubKey = session.__responder_pub
|
||||
sigma2.encrypted2 = TBEData2Encrypted
|
||||
# tasmota.log("MTR: sigma2: " + matter.inspect(sigma2), 4)
|
||||
tasmota.log("MTR: sigma2: " + matter.inspect(sigma2), 4)
|
||||
var sigma2_raw = sigma2.tlv2raw()
|
||||
session.__Msg2 = sigma2_raw
|
||||
# tasmota.log("MTR: sigma2_raw: " + sigma2_raw.tohex(), 4)
|
||||
|
@ -381,9 +381,9 @@ class Matter_Device
|
||||
# Start Operational Discovery for this session
|
||||
#
|
||||
# Deferred until next tick.
|
||||
def start_operational_discovery_deferred(session)
|
||||
def start_operational_discovery_deferred(fabric)
|
||||
# defer to next click
|
||||
tasmota.set_timer(0, /-> self.start_operational_discovery(session))
|
||||
tasmota.set_timer(0, /-> self.start_operational_discovery(fabric))
|
||||
end
|
||||
|
||||
#############################################################
|
||||
@ -400,7 +400,7 @@ class Matter_Device
|
||||
#
|
||||
# Stop Basic Commissioning and clean PASE specific values (to save memory).
|
||||
# Announce fabric entry in mDNS.
|
||||
def start_operational_discovery(session)
|
||||
def start_operational_discovery(fabric)
|
||||
import crypto
|
||||
import mdns
|
||||
import string
|
||||
@ -411,10 +411,7 @@ class Matter_Device
|
||||
# self.root_w1 = nil
|
||||
self.root_L = nil
|
||||
|
||||
# we keep the PASE session for 1 minute
|
||||
session.set_expire_in_seconds(60)
|
||||
|
||||
self.mdns_announce_op_discovery(session.get_fabric())
|
||||
self.mdns_announce_op_discovery(fabric)
|
||||
end
|
||||
|
||||
#############################################################
|
||||
|
@ -96,6 +96,54 @@ class Matter_Fabric : Matter_Expirable
|
||||
def get_fabric_index() return self.fabric_index end
|
||||
|
||||
def set_fabric_index(v) self.fabric_index = v end
|
||||
def set_ca(ca)
|
||||
self.root_ca_certificate = ca
|
||||
end
|
||||
def set_noc_icac(noc, icac)
|
||||
self.noc = noc
|
||||
self.icac = icac
|
||||
end
|
||||
def set_ipk_epoch_key(ipk_epoch_key)
|
||||
self.ipk_epoch_key = ipk_epoch_key
|
||||
end
|
||||
def set_admin_subject_vendor(admin_subject, admin_vendor)
|
||||
self.admin_subject = admin_subject
|
||||
self.admin_vendor = admin_vendor
|
||||
end
|
||||
|
||||
def set_fabric_device(fabric_id, device_id, fc, fabric_parent)
|
||||
self.fabric_id = fabric_id
|
||||
self.device_id = device_id
|
||||
self.fabric_compressed = fc
|
||||
self.fabric_parent = (fabric_parent != nil) ? fabric_parent.get_fabric_index() : nil
|
||||
end
|
||||
|
||||
#############################################################
|
||||
# Generate a private key (or retrieve it)
|
||||
#
|
||||
# PK is generated by a commissioning session
|
||||
def get_pk()
|
||||
return self.no_private_key
|
||||
end
|
||||
def set_pk(pk)
|
||||
self.no_private_key = pk
|
||||
end
|
||||
|
||||
#############################################################
|
||||
# Register the frabric as complete (end of commissioning)
|
||||
def fabric_candidate()
|
||||
self.set_expire_in_seconds(120) # expire in 2 minutes
|
||||
self.assign_fabric_index()
|
||||
self._store.add_fabric(self)
|
||||
end
|
||||
|
||||
#############################################################
|
||||
# Assign a new fabric index
|
||||
def assign_fabric_index()
|
||||
if (self.get_fabric_index() == nil)
|
||||
self.set_fabric_index(self._store.next_fabric_idx())
|
||||
end
|
||||
end
|
||||
|
||||
#############################################################
|
||||
# When hydrating from persistance, update counters
|
||||
@ -109,6 +157,15 @@ class Matter_Fabric : Matter_Expirable
|
||||
self.counter_group_ctrl_snd = self._counter_group_ctrl_snd_impl.val()
|
||||
end
|
||||
|
||||
#############################################################
|
||||
# Register the fabric as complete (end of commissioning)
|
||||
def fabric_completed()
|
||||
self.set_no_expiration()
|
||||
self.set_persist(true)
|
||||
self.assign_fabric_index()
|
||||
self._store.add_fabric(self)
|
||||
end
|
||||
|
||||
#############################################################
|
||||
# Management of security counters
|
||||
#############################################################
|
||||
|
@ -402,9 +402,10 @@ class Matter_IM
|
||||
ctx.status = matter.UNSUPPORTED_COMMAND #default error if returned `nil`
|
||||
|
||||
var cmd_name = matter.get_command_name(ctx.cluster, ctx.command)
|
||||
var ctx_str = str(ctx) # keep string before invoking, it is modified by response
|
||||
var res = self.device.invoke_request(msg.session, q.command_fields, ctx)
|
||||
var params_log = (ctx.log != nil) ? "(" + str(ctx.log) + ") " : ""
|
||||
tasmota.log(string.format("MTR: >Command (%6i) %s %s %s", msg.session.local_session_id, str(ctx), cmd_name ? cmd_name : "", params_log), 2)
|
||||
tasmota.log(string.format("MTR: >Command (%6i) %s %s %s", msg.session.local_session_id, ctx_str, cmd_name ? cmd_name : "", params_log), 2)
|
||||
ctx.log = nil
|
||||
var a1 = matter.InvokeResponseIB()
|
||||
if res == true || ctx.status == matter.SUCCESS # special case, just respond ok
|
||||
|
@ -362,22 +362,26 @@ class Matter_Plugin_Root : Matter_Plugin
|
||||
|
||||
elif command == 0x0004 # ---------- CommissioningComplete p.636 ----------
|
||||
# no data
|
||||
session._breadcrumb = 0 # clear breadcrumb
|
||||
session.fabric_completed() # fabric information is complete, persist
|
||||
session.set_no_expiration()
|
||||
session.save()
|
||||
if session._fabric
|
||||
session._breadcrumb = 0 # clear breadcrumb
|
||||
session._fabric.fabric_completed() # fabric information is complete, persist
|
||||
session.set_no_expiration()
|
||||
session.save()
|
||||
|
||||
# create CommissioningCompleteResponse
|
||||
# ID=1
|
||||
# 0=ErrorCode (OK=0)
|
||||
# 1=DebugText
|
||||
var ccr = TLV.Matter_TLV_struct()
|
||||
ccr.add_TLV(0, TLV.U1, 0) # ErrorCode = OK
|
||||
ccr.add_TLV(1, TLV.UTF1, "") # DebugText = ""
|
||||
ctx.command = 0x05 # CommissioningCompleteResponse
|
||||
# create CommissioningCompleteResponse
|
||||
# ID=1
|
||||
# 0=ErrorCode (OK=0)
|
||||
# 1=DebugText
|
||||
var ccr = TLV.Matter_TLV_struct()
|
||||
ccr.add_TLV(0, TLV.U1, 0) # ErrorCode = OK
|
||||
ccr.add_TLV(1, TLV.UTF1, "") # DebugText = ""
|
||||
ctx.command = 0x05 # CommissioningCompleteResponse
|
||||
|
||||
self.device.start_commissioning_complete_deferred(session)
|
||||
return ccr
|
||||
self.device.start_commissioning_complete_deferred(session)
|
||||
return ccr
|
||||
else
|
||||
raise "context_error", "CommissioningComplete: no fabric attached"
|
||||
end
|
||||
end
|
||||
|
||||
elif cluster == 0x003E # ========== Node Operational Credentials Cluster 11.17 p.704 ==========
|
||||
@ -427,6 +431,7 @@ class Matter_Plugin_Root : Matter_Plugin
|
||||
var CSRNonce = val.findsubval(0) # octstr 32
|
||||
if size(CSRNonce) != 32 return nil end # check size on nonce
|
||||
var IsForUpdateNOC = val.findsubval(1, false) # bool
|
||||
tasmota.log(string.format("MTR: CSRRequest CSRNonce=%s IsForUpdateNOC=%s", str(CSRNonce), str(IsForUpdateNOC)), 3)
|
||||
|
||||
var csr = session.gen_CSR()
|
||||
|
||||
@ -450,12 +455,14 @@ class Matter_Plugin_Root : Matter_Plugin
|
||||
|
||||
elif command == 0x000B # ---------- AddTrustedRootCertificate ----------
|
||||
var RootCACertificate = val.findsubval(0) # octstr 400 max
|
||||
session.set_ca(RootCACertificate)
|
||||
# TODO - additional tests are expected according to 11.17.7.13. AddTrustedRootCertificate Command
|
||||
session.set_temp_ca(RootCACertificate)
|
||||
tasmota.log("MTR: received ca_root="+RootCACertificate.tohex(), 3)
|
||||
ctx.status = matter.SUCCESS # OK
|
||||
return nil # trigger a standalone ack
|
||||
|
||||
elif command == 0x0006 # ---------- AddNOC ----------
|
||||
tasmota.log("MTR: AddNoc Args=" + str(val), 3)
|
||||
var NOCValue = val.findsubval(0) # octstr max 400
|
||||
var ICACValue = val.findsubval(1) # octstr max 400
|
||||
# Apple sends an empty ICAC instead of a missing attribute, fix this
|
||||
@ -463,21 +470,32 @@ class Matter_Plugin_Root : Matter_Plugin
|
||||
var IpkValue = val.findsubval(2) # octstr max 16
|
||||
var CaseAdminSubject = val.findsubval(3)
|
||||
var AdminVendorId = val.findsubval(4)
|
||||
# tasmota.log("MTR: AddNoc NOCValue=" + (NOCValue ? NOCValue.tohex() : ""), 3)
|
||||
# tasmota.log("MTR: AddNoc ICACValue=" + (ICACValue ? ICACValue.tohex() : ""), 3)
|
||||
# tasmota.log("MTR: AddNoc IpkValue=" + str(IpkValue), 3)
|
||||
# tasmota.log("MTR: AddNoc CaseAdminSubject=" + str(CaseAdminSubject), 3)
|
||||
# tasmota.log("MTR: AddNoc AdminVendorId=" + str(AdminVendorId), 3)
|
||||
|
||||
if session.get_ca() == nil
|
||||
if session.get_temp_ca() == nil
|
||||
tasmota.log("MTR: Error: AdNOC without CA", 2)
|
||||
return nil
|
||||
end
|
||||
|
||||
session.set_noc(NOCValue, ICACValue)
|
||||
session.set_ipk_epoch_key(IpkValue)
|
||||
session.set_admin_subject_vendor(CaseAdminSubject, AdminVendorId)
|
||||
var new_fabric = self.device.sessions.create_fabric()
|
||||
new_fabric.set_ca(session.get_temp_ca()) # copy temporary CA to fabric
|
||||
new_fabric.set_noc_icac(NOCValue, ICACValue)
|
||||
new_fabric.set_ipk_epoch_key(IpkValue)
|
||||
new_fabric.set_admin_subject_vendor(CaseAdminSubject, AdminVendorId)
|
||||
new_fabric.set_pk(session.get_pk()) # copy the temporary commissioning PK to the fabric
|
||||
|
||||
# extract important information from NOC
|
||||
var noc_cert = matter.TLV.parse(NOCValue)
|
||||
var dnlist = noc_cert.findsub(6)
|
||||
var fabric_id = dnlist.findsubval(21)
|
||||
var deviceid = dnlist.findsubval(17)
|
||||
# tasmota.log("MTR: AddNoc noc_cert=" + str(noc_cert), 3)
|
||||
# tasmota.log("MTR: AddNoc dnlist=" + str(dnlist), 3)
|
||||
|
||||
if !fabric_id || !deviceid
|
||||
tasmota.log("MTR: Error: no fabricid nor deviceid in NOC certificate", 2)
|
||||
return false
|
||||
@ -486,25 +504,37 @@ class Matter_Plugin_Root : Matter_Plugin
|
||||
if type(fabric_id) == 'int' fabric_id = int64.fromu32(fabric_id).tobytes() else fabric_id = fabric_id.tobytes() end
|
||||
if type(deviceid) == 'int' deviceid = int64.fromu32(deviceid).tobytes() else deviceid = deviceid.tobytes() end
|
||||
|
||||
var root_ca = matter.TLV.parse(session.get_ca()).findsubval(9) # extract public key from ca
|
||||
root_ca = root_ca[1..] # remove first byte as per Matter specification
|
||||
# tasmota.log("MTR: AddNoc fabric_id=" + str(fabric_id), 3)
|
||||
# tasmota.log("MTR: AddNoc deviceid=" + str(deviceid), 3)
|
||||
|
||||
var root_ca_pub = session.get_temp_ca_pub()
|
||||
# tasmota.log("MTR: AddNoc root_ca_pub=" + str(root_ca_pub), 3)
|
||||
# tasmota.log("MTR: AddNoc root_ca_pub=" + root_ca_pub.tohex(), 3)
|
||||
root_ca_pub = root_ca_pub[1..] # remove first byte as per Matter specification
|
||||
var info = bytes().fromstring("CompressedFabric") # as per spec, 4.3.2.2 p.99
|
||||
var hk = crypto.HKDF_SHA256()
|
||||
var fabric_rev = fabric_id.copy().reverse()
|
||||
var k_fabric = hk.derive(root_ca, fabric_rev, info, 8)
|
||||
session.set_fabric_device(fabric_id, deviceid, k_fabric, self.device.commissioning_admin_fabric)
|
||||
var k_fabric = hk.derive(root_ca_pub, fabric_rev, info, 8)
|
||||
var parent_fabric = session._fabric ? session._fabric : self.device.commissioning_admin_fabric # get parent fabric whether CASE or PASE
|
||||
new_fabric.set_fabric_device(fabric_id, deviceid, k_fabric, parent_fabric)
|
||||
|
||||
# tasmota.log("MTR: AddNoc k_fabric=" + str(k_fabric), 3)
|
||||
# We have a candidate fabric, add it as expirable for 2 minutes
|
||||
session.persist_to_fabric() # fabric object is completed, persist it
|
||||
session.fabric_candidate()
|
||||
new_fabric.fabric_candidate()
|
||||
|
||||
# move to next step
|
||||
self.device.start_operational_discovery_deferred(session)
|
||||
# session.fabric_completed()
|
||||
tasmota.log("MTR: ------------------------------------------", 3)
|
||||
tasmota.log("MTR: fabric=" + matter.inspect(session._fabric), 3)
|
||||
tasmota.log("MTR: ------------------------------------------", 3)
|
||||
session._fabric.log_new_fabric() # log that we registered a new fabric
|
||||
self.device.start_operational_discovery_deferred(new_fabric)
|
||||
|
||||
# we keep the PASE session for 1 minute
|
||||
if session.is_PASE()
|
||||
session.set_expire_in_seconds(60)
|
||||
end
|
||||
|
||||
# tasmota.log("MTR: ------------------------------------------", 3)
|
||||
# tasmota.log("MTR: session=" + matter.inspect(session), 3)
|
||||
# tasmota.log("MTR: fabric=" + matter.inspect(session._fabric), 3)
|
||||
# tasmota.log("MTR: ------------------------------------------", 3)
|
||||
new_fabric.log_new_fabric() # log that we registered a new fabric
|
||||
# create NOCResponse
|
||||
# 0=StatusCode
|
||||
# 1=FabricIndex (1-254) (opt)
|
||||
|
@ -48,6 +48,9 @@ class Matter_Session : Matter_Expirable
|
||||
var created # timestamp (UTC) when the session was created
|
||||
var last_used # timestamp (UTC) when the session was last used
|
||||
var _source_node_id # source node if bytes(8) (opt, used only when session is not established)
|
||||
# temporary data for ArmFailSafe provisioning - before it is stored in a fabric
|
||||
var _temp_root_ca_certificate # temporary root_ca_certificate added by `AddTrustedRootCertificate` before `AddNoc`
|
||||
var _temp_pk
|
||||
# session_ids when the session will be active
|
||||
var __future_initiator_session_id
|
||||
var __future_local_session_id
|
||||
@ -108,7 +111,7 @@ class Matter_Session : Matter_Expirable
|
||||
self._breadcrumb = 0
|
||||
self._exchange_id = crypto.random(2).get(0,2) # generate a random 16 bits number, then increment with rollover
|
||||
|
||||
self._fabric = fabric ? fabric : self._store.create_fabric()
|
||||
self._fabric = fabric
|
||||
self.update()
|
||||
end
|
||||
|
||||
@ -173,31 +176,6 @@ class Matter_Session : Matter_Expirable
|
||||
def is_PASE() return self.mode == self._PASE end
|
||||
def is_CASE() return self.mode == self._CASE end
|
||||
|
||||
#############################################################
|
||||
# Assign a new fabric index
|
||||
def assign_fabric_index()
|
||||
if (self._fabric.get_fabric_index() == nil)
|
||||
self._fabric.set_fabric_index(self._store.next_fabric_idx())
|
||||
end
|
||||
end
|
||||
|
||||
#############################################################
|
||||
# Register the fabric as complete (end of commissioning)
|
||||
def fabric_completed()
|
||||
self._fabric.set_no_expiration()
|
||||
self._fabric.set_persist(true)
|
||||
self.assign_fabric_index()
|
||||
self._store.add_fabric(self._fabric)
|
||||
end
|
||||
|
||||
#############################################################
|
||||
# Register the frabric as complete (end of commissioning)
|
||||
def fabric_candidate()
|
||||
self._fabric.set_expire_in_seconds(120) # expire in 2 minutes
|
||||
self.assign_fabric_index()
|
||||
self._store.add_fabric(self._fabric)
|
||||
end
|
||||
|
||||
#############################################################
|
||||
# Persist to fabric
|
||||
# Add self session to the persisted established CASE session of the fabric
|
||||
@ -241,26 +219,16 @@ class Matter_Session : Matter_Expirable
|
||||
self.attestation_challenge = ac
|
||||
self.created = st
|
||||
end
|
||||
def set_ca(ca)
|
||||
self._fabric.root_ca_certificate = ca
|
||||
def set_temp_ca(ca)
|
||||
self._temp_root_ca_certificate = ca
|
||||
end
|
||||
def set_noc(noc, icac)
|
||||
self._fabric.noc = noc
|
||||
self._fabric.icac = icac
|
||||
end
|
||||
def set_ipk_epoch_key(ipk_epoch_key)
|
||||
self._fabric.ipk_epoch_key = ipk_epoch_key
|
||||
end
|
||||
def set_admin_subject_vendor(admin_subject, admin_vendor)
|
||||
self._fabric.admin_subject = admin_subject
|
||||
self._fabric.admin_vendor = admin_vendor
|
||||
end
|
||||
|
||||
def set_fabric_device(fabric_id, device_id, fc, fabric_parent)
|
||||
self._fabric.fabric_id = fabric_id
|
||||
self._fabric.device_id = device_id
|
||||
self._fabric.fabric_compressed = fc
|
||||
self._fabric.fabric_parent = (fabric_parent != nil) ? fabric_parent.get_fabric_index() : nil
|
||||
def get_temp_ca() return self._temp_root_ca_certificate end
|
||||
def get_temp_ca_pub()
|
||||
var ca = self._temp_root_ca_certificate
|
||||
if ca
|
||||
var m = matter.TLV.parse(ca)
|
||||
return m.findsubval(9)
|
||||
end
|
||||
end
|
||||
def set_fabric_label(s)
|
||||
if type(s) == 'string'
|
||||
@ -269,12 +237,8 @@ class Matter_Session : Matter_Expirable
|
||||
end
|
||||
|
||||
#############################################################
|
||||
def get_mode()
|
||||
return self.mode
|
||||
end
|
||||
def get_i2r()
|
||||
return self.i2rkey
|
||||
end
|
||||
def get_mode() return self.mode end
|
||||
def get_i2r() return self.i2rkey end
|
||||
def get_i2r_privacy() # get and cache privacy key
|
||||
if self._i2r_privacy == nil
|
||||
import crypto
|
||||
@ -283,18 +247,11 @@ class Matter_Session : Matter_Expirable
|
||||
end
|
||||
return self._i2r_privacy
|
||||
end
|
||||
def get_r2i()
|
||||
return self.r2ikey
|
||||
end
|
||||
def get_ac()
|
||||
return self.attestation_challenge
|
||||
end
|
||||
def get_ca()
|
||||
return self._fabric.root_ca_certificate
|
||||
end
|
||||
def get_ca_pub()
|
||||
return self._fabric.get_ca_pub()
|
||||
end
|
||||
def get_r2i() return self.r2ikey end
|
||||
def get_ac() return self.attestation_challenge end
|
||||
|
||||
def get_ca() return self._fabric.root_ca_certificate end
|
||||
def get_ca_pub() return self._fabric.get_ca_pub() end
|
||||
def get_fabric() return self._fabric end
|
||||
def get_noc() return self._fabric.noc end
|
||||
def get_icac() return self._fabric.icac end
|
||||
@ -307,24 +264,27 @@ class Matter_Session : Matter_Expirable
|
||||
def get_admin_vendor() return self._fabric.admin_vendor end
|
||||
|
||||
#############################################################
|
||||
# Generate a private key (or retrieve it)
|
||||
# Get operational key pair (private key)
|
||||
#
|
||||
# If there is a fabric, retrieve the PK from the fabric
|
||||
# If there is no fabric, create a temporary PK in `_temp_pk`
|
||||
# to be stored later in the fabric
|
||||
def get_pk()
|
||||
if !self._fabric.no_private_key
|
||||
import crypto
|
||||
self._fabric.no_private_key = crypto.random(32)
|
||||
if self._fabric
|
||||
return self._fabric.get_pk()
|
||||
else
|
||||
if !self._temp_pk
|
||||
import crypto
|
||||
self._temp_pk = crypto.random(32)
|
||||
end
|
||||
return self._temp_pk
|
||||
end
|
||||
return self._fabric.no_private_key
|
||||
end
|
||||
|
||||
#############################################################
|
||||
# Operational Group Key Derivation, 4.15.2, p.182
|
||||
def get_ipk_group_key()
|
||||
if self.get_ipk_epoch_key() == nil || self.get_fabric_compressed() == nil return nil end
|
||||
import crypto
|
||||
var hk = crypto.HKDF_SHA256()
|
||||
var info = bytes().fromstring(self._GROUP_KEY)
|
||||
var hash = hk.derive(self.get_ipk_epoch_key(), self.get_fabric_compressed(), info, 16)
|
||||
return hash
|
||||
return self._fabric.get_ipk_group_key()
|
||||
end
|
||||
|
||||
#############################################################
|
||||
|
@ -1425,7 +1425,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
|
||||
0, /* has sup protos */
|
||||
NULL, /* no sub protos */
|
||||
1, /* has constants */
|
||||
( &(const bvalue[118]) { /* constants */
|
||||
( &(const bvalue[130]) { /* constants */
|
||||
/* K0 */ be_nested_str_weak(crypto),
|
||||
/* K1 */ be_nested_str_weak(string),
|
||||
/* K2 */ be_nested_str_weak(session),
|
||||
@ -1507,14 +1507,14 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
|
||||
/* K78 */ be_nested_str_weak(MTR_X3A_X20StatusReport_X28GeneralCode_X3A_X20FAILURE_X2C_X20ProtocolId_X3A_X20SECURE_CHANNEL_X2C_X20ProtocolCode_X3A_X20NO_SHARED_TRUST_ROOTS_X29),
|
||||
/* K79 */ be_nested_str_weak(MTR_X3A_X20fabric_X3D),
|
||||
/* K80 */ be_nested_str_weak(MTR_X3A_X20no_private_key_X3D),
|
||||
/* K81 */ be_nested_str_weak(no_private_key),
|
||||
/* K81 */ be_nested_str_weak(get_pk),
|
||||
/* K82 */ be_nested_str_weak(tohex),
|
||||
/* K83 */ be_nested_str_weak(MTR_X3A_X20noc_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
|
||||
/* K84 */ be_nested_str_weak(noc),
|
||||
/* K84 */ be_nested_str_weak(get_noc),
|
||||
/* K85 */ be_nested_str_weak(get_icac),
|
||||
/* K86 */ be_nested_str_weak(MTR_X3A_X20icac_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
|
||||
/* K87 */ be_nested_str_weak(MTR_X3A_X20root_ca_cert_X20_X20_X3D),
|
||||
/* K88 */ be_nested_str_weak(root_ca_certificate),
|
||||
/* K88 */ be_nested_str_weak(get_ca),
|
||||
/* K89 */ be_nested_str_weak(__responder_priv),
|
||||
/* K90 */ be_nested_str_weak(__responder_pub),
|
||||
/* K91 */ be_nested_str_weak(EC_P256),
|
||||
@ -1522,32 +1522,44 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
|
||||
/* K93 */ be_nested_str_weak(MTR_X3A_X20ResponderEph_priv_X20_X20_X3D),
|
||||
/* K94 */ be_nested_str_weak(MTR_X3A_X20ResponderEph_pub_X20_X20_X3D),
|
||||
/* K95 */ be_nested_str_weak(shared_key),
|
||||
/* K96 */ be_nested_str_weak(TLV),
|
||||
/* K97 */ be_nested_str_weak(Matter_TLV_struct),
|
||||
/* K98 */ be_nested_str_weak(add_TLV),
|
||||
/* K99 */ be_nested_str_weak(B2),
|
||||
/* K100 */ be_nested_str_weak(get_noc),
|
||||
/* K96 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20shared_secret_X20_X20_X3D_X20),
|
||||
/* K97 */ be_nested_str_weak(TLV),
|
||||
/* K98 */ be_nested_str_weak(Matter_TLV_struct),
|
||||
/* K99 */ be_nested_str_weak(add_TLV),
|
||||
/* K100 */ be_nested_str_weak(B2),
|
||||
/* K101 */ be_const_int(3),
|
||||
/* K102 */ be_nested_str_weak(ecdsa_sign_sha256),
|
||||
/* K103 */ be_nested_str_weak(get_pk),
|
||||
/* K104 */ be_nested_str_weak(Msg1),
|
||||
/* K105 */ be_nested_str_weak(SHA256),
|
||||
/* K106 */ be_nested_str_weak(update),
|
||||
/* K107 */ be_nested_str_weak(out),
|
||||
/* K108 */ be_nested_str_weak(S2K_Info),
|
||||
/* K109 */ be_nested_str_weak(get_ipk_group_key),
|
||||
/* K110 */ be_nested_str_weak(TBEData2_Nonce),
|
||||
/* K111 */ be_nested_str_weak(encrypt),
|
||||
/* K112 */ be_nested_str_weak(Sigma2),
|
||||
/* K113 */ be_nested_str_weak(responderRandom),
|
||||
/* K114 */ be_nested_str_weak(responderSessionId),
|
||||
/* K115 */ be_nested_str_weak(responderEphPubKey),
|
||||
/* K116 */ be_nested_str_weak(encrypted2),
|
||||
/* K117 */ be_nested_str_weak(__Msg2),
|
||||
/* K103 */ be_nested_str_weak(_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_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
|
||||
/* K104 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20fabric_X2Eget_pk_X20_X20_X3D_X20),
|
||||
/* K105 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20sigma2_tbsdata_X20_X20_X3D_X20),
|
||||
/* K106 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBSData2Signature_X20_X20_X3D_X20),
|
||||
/* K107 */ be_nested_str_weak(Msg1),
|
||||
/* K108 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20resumptionid_X20_X20_X3D_X20),
|
||||
/* K109 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20MSG1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
|
||||
/* K110 */ be_nested_str_weak(SHA256),
|
||||
/* K111 */ be_nested_str_weak(update),
|
||||
/* K112 */ be_nested_str_weak(out),
|
||||
/* K113 */ be_nested_str_weak(MTR_X3A_X20TranscriptHash_X20_X3D),
|
||||
/* K114 */ be_nested_str_weak(S2K_Info),
|
||||
/* K115 */ be_nested_str_weak(get_ipk_group_key),
|
||||
/* K116 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20SharedSecret_X20_X20_X3D_X20),
|
||||
/* K117 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
|
||||
/* K118 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
|
||||
/* K119 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Raw_X20_X20_X20_X3D_X20),
|
||||
/* K120 */ be_nested_str_weak(TBEData2_Nonce),
|
||||
/* K121 */ be_nested_str_weak(encrypt),
|
||||
/* K122 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Enc_X20_X20_X20_X3D_X20),
|
||||
/* K123 */ be_nested_str_weak(Sigma2),
|
||||
/* K124 */ be_nested_str_weak(responderRandom),
|
||||
/* K125 */ be_nested_str_weak(responderSessionId),
|
||||
/* K126 */ be_nested_str_weak(responderEphPubKey),
|
||||
/* K127 */ be_nested_str_weak(encrypted2),
|
||||
/* K128 */ be_nested_str_weak(MTR_X3A_X20sigma2_X3A_X20),
|
||||
/* K129 */ be_nested_str_weak(__Msg2),
|
||||
}),
|
||||
be_str_weak(parse_Sigma1),
|
||||
&be_const_str_solidified,
|
||||
( &(const binstruction[576]) { /* code */
|
||||
( &(const binstruction[689]) { /* code */
|
||||
0xA40A0000, // 0000 IMPORT R2 K0
|
||||
0xA40E0200, // 0001 IMPORT R3 K1
|
||||
0x88100302, // 0002 GETMBR R4 R1 K2
|
||||
@ -1833,7 +1845,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
|
||||
0x70020000, // 011A JMP #011C
|
||||
0x50180000, // 011B LDBOOL R6 0 0
|
||||
0x5C200C00, // 011C MOVE R8 R6
|
||||
0x7422011F, // 011D JMPT R8 #023E
|
||||
0x74220190, // 011D JMPT R8 #02AF
|
||||
0x8C20014C, // 011E GETMET R8 R0 K76
|
||||
0x88280B4D, // 011F GETMBR R10 R5 K77
|
||||
0x882C0B1F, // 0120 GETMBR R11 R5 K31
|
||||
@ -1892,8 +1904,8 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
|
||||
0x7C240600, // 0155 CALL R9 3
|
||||
0xB8260E00, // 0156 GETNGBL R9 K7
|
||||
0x8C241308, // 0157 GETMET R9 R9 K8
|
||||
0x882C091E, // 0158 GETMBR R11 R4 K30
|
||||
0x882C1751, // 0159 GETMBR R11 R11 K81
|
||||
0x8C2C0951, // 0158 GETMET R11 R4 K81
|
||||
0x7C2C0200, // 0159 CALL R11 1
|
||||
0x8C2C1752, // 015A GETMET R11 R11 K82
|
||||
0x7C2C0200, // 015B CALL R11 1
|
||||
0x002EA00B, // 015C ADD R11 K80 R11
|
||||
@ -1901,229 +1913,342 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
|
||||
0x7C240600, // 015E CALL R9 3
|
||||
0xB8260E00, // 015F GETNGBL R9 K7
|
||||
0x8C241308, // 0160 GETMET R9 R9 K8
|
||||
0x882C091E, // 0161 GETMBR R11 R4 K30
|
||||
0x882C1754, // 0162 GETMBR R11 R11 K84
|
||||
0x8C2C0954, // 0161 GETMET R11 R4 K84
|
||||
0x7C2C0200, // 0162 CALL R11 1
|
||||
0x8C2C1752, // 0163 GETMET R11 R11 K82
|
||||
0x7C2C0200, // 0164 CALL R11 1
|
||||
0x002EA60B, // 0165 ADD R11 K83 R11
|
||||
0x54320003, // 0166 LDINT R12 4
|
||||
0x7C240600, // 0167 CALL R9 3
|
||||
0x8824091E, // 0168 GETMBR R9 R4 K30
|
||||
0x8C241355, // 0169 GETMET R9 R9 K85
|
||||
0x7C240200, // 016A CALL R9 1
|
||||
0x78260009, // 016B JMPF R9 #0176
|
||||
0xB8260E00, // 016C GETNGBL R9 K7
|
||||
0x8C241308, // 016D GETMET R9 R9 K8
|
||||
0x882C091E, // 016E GETMBR R11 R4 K30
|
||||
0x8C2C1755, // 016F GETMET R11 R11 K85
|
||||
0x8C241155, // 0168 GETMET R9 R8 K85
|
||||
0x7C240200, // 0169 CALL R9 1
|
||||
0x78260008, // 016A JMPF R9 #0174
|
||||
0xB8260E00, // 016B GETNGBL R9 K7
|
||||
0x8C241308, // 016C GETMET R9 R9 K8
|
||||
0x8C2C1155, // 016D GETMET R11 R8 K85
|
||||
0x7C2C0200, // 016E CALL R11 1
|
||||
0x8C2C1752, // 016F GETMET R11 R11 K82
|
||||
0x7C2C0200, // 0170 CALL R11 1
|
||||
0x8C2C1752, // 0171 GETMET R11 R11 K82
|
||||
0x7C2C0200, // 0172 CALL R11 1
|
||||
0x002EAC0B, // 0173 ADD R11 K86 R11
|
||||
0x54320003, // 0174 LDINT R12 4
|
||||
0x7C240600, // 0175 CALL R9 3
|
||||
0xB8260E00, // 0176 GETNGBL R9 K7
|
||||
0x8C241308, // 0177 GETMET R9 R9 K8
|
||||
0x882C091E, // 0178 GETMBR R11 R4 K30
|
||||
0x882C1758, // 0179 GETMBR R11 R11 K88
|
||||
0x8C2C1752, // 017A GETMET R11 R11 K82
|
||||
0x7C2C0200, // 017B CALL R11 1
|
||||
0x002EAE0B, // 017C ADD R11 K87 R11
|
||||
0x54320003, // 017D LDINT R12 4
|
||||
0x7C240600, // 017E CALL R9 3
|
||||
0x8C240535, // 017F GETMET R9 R2 K53
|
||||
0x542E000F, // 0180 LDINT R11 16
|
||||
0x7C240400, // 0181 CALL R9 2
|
||||
0x90126809, // 0182 SETMBR R4 K52 R9
|
||||
0x8C240535, // 0183 GETMET R9 R2 K53
|
||||
0x542E001F, // 0184 LDINT R11 32
|
||||
0x7C240400, // 0185 CALL R9 2
|
||||
0x9012B209, // 0186 SETMBR R4 K89 R9
|
||||
0x8C24055B, // 0187 GETMET R9 R2 K91
|
||||
0x7C240200, // 0188 CALL R9 1
|
||||
0x8C24135C, // 0189 GETMET R9 R9 K92
|
||||
0x882C0959, // 018A GETMBR R11 R4 K89
|
||||
0x7C240400, // 018B CALL R9 2
|
||||
0x9012B409, // 018C SETMBR R4 K90 R9
|
||||
0xB8260E00, // 018D GETNGBL R9 K7
|
||||
0x8C241308, // 018E GETMET R9 R9 K8
|
||||
0x882C0959, // 018F GETMBR R11 R4 K89
|
||||
0x8C2C1752, // 0190 GETMET R11 R11 K82
|
||||
0x7C2C0200, // 0191 CALL R11 1
|
||||
0x002EBA0B, // 0192 ADD R11 K93 R11
|
||||
0x54320003, // 0193 LDINT R12 4
|
||||
0x7C240600, // 0194 CALL R9 3
|
||||
0xB8260E00, // 0195 GETNGBL R9 K7
|
||||
0x8C241308, // 0196 GETMET R9 R9 K8
|
||||
0x882C095A, // 0197 GETMBR R11 R4 K90
|
||||
0x8C2C1752, // 0198 GETMET R11 R11 K82
|
||||
0x7C2C0200, // 0199 CALL R11 1
|
||||
0x002EBC0B, // 019A ADD R11 K94 R11
|
||||
0x54320003, // 019B LDINT R12 4
|
||||
0x7C240600, // 019C CALL R9 3
|
||||
0x8C240535, // 019D GETMET R9 R2 K53
|
||||
0x542E001F, // 019E LDINT R11 32
|
||||
0x7C240400, // 019F CALL R9 2
|
||||
0x8C28055B, // 01A0 GETMET R10 R2 K91
|
||||
0x7C280200, // 01A1 CALL R10 1
|
||||
0x8C28155F, // 01A2 GETMET R10 R10 K95
|
||||
0x88300959, // 01A3 GETMBR R12 R4 K89
|
||||
0x88340B16, // 01A4 GETMBR R13 R5 K22
|
||||
0x7C280600, // 01A5 CALL R10 3
|
||||
0x9012480A, // 01A6 SETMBR R4 K36 R10
|
||||
0xB82A1A00, // 01A7 GETNGBL R10 K13
|
||||
0x88281560, // 01A8 GETMBR R10 R10 K96
|
||||
0x8C281561, // 01A9 GETMET R10 R10 K97
|
||||
0x7C280200, // 01AA CALL R10 1
|
||||
0x8C2C1562, // 01AB GETMET R11 R10 K98
|
||||
0x5834000C, // 01AC LDCONST R13 K12
|
||||
0xB83A1A00, // 01AD GETNGBL R14 K13
|
||||
0x88381D60, // 01AE GETMBR R14 R14 K96
|
||||
0x88381D63, // 01AF GETMBR R14 R14 K99
|
||||
0x8C3C0964, // 01B0 GETMET R15 R4 K100
|
||||
0x7C3C0200, // 01B1 CALL R15 1
|
||||
0x7C2C0800, // 01B2 CALL R11 4
|
||||
0x8C2C1562, // 01B3 GETMET R11 R10 K98
|
||||
0x5834000A, // 01B4 LDCONST R13 K10
|
||||
0xB83A1A00, // 01B5 GETNGBL R14 K13
|
||||
0x88381D60, // 01B6 GETMBR R14 R14 K96
|
||||
0x88381D63, // 01B7 GETMBR R14 R14 K99
|
||||
0x8C3C0955, // 01B8 GETMET R15 R4 K85
|
||||
0x7C3C0200, // 01B9 CALL R15 1
|
||||
0x7C2C0800, // 01BA CALL R11 4
|
||||
0x8C2C1562, // 01BB GETMET R11 R10 K98
|
||||
0x58340065, // 01BC LDCONST R13 K101
|
||||
0xB83A1A00, // 01BD GETNGBL R14 K13
|
||||
0x88381D60, // 01BE GETMBR R14 R14 K96
|
||||
0x88381D63, // 01BF GETMBR R14 R14 K99
|
||||
0x883C095A, // 01C0 GETMBR R15 R4 K90
|
||||
0x7C2C0800, // 01C1 CALL R11 4
|
||||
0x8C2C1562, // 01C2 GETMET R11 R10 K98
|
||||
0x54360003, // 01C3 LDINT R13 4
|
||||
0xB83A1A00, // 01C4 GETNGBL R14 K13
|
||||
0x88381D60, // 01C5 GETMBR R14 R14 K96
|
||||
0x88381D63, // 01C6 GETMBR R14 R14 K99
|
||||
0x883C0B16, // 01C7 GETMBR R15 R5 K22
|
||||
0x7C2C0800, // 01C8 CALL R11 4
|
||||
0x8C2C055B, // 01C9 GETMET R11 R2 K91
|
||||
0x7C2C0200, // 01CA CALL R11 1
|
||||
0x8C2C1766, // 01CB GETMET R11 R11 K102
|
||||
0x8C340967, // 01CC GETMET R13 R4 K103
|
||||
0x7C340200, // 01CD CALL R13 1
|
||||
0x8C38153E, // 01CE GETMET R14 R10 K62
|
||||
0x7C380200, // 01CF CALL R14 1
|
||||
0x7C2C0600, // 01D0 CALL R11 3
|
||||
0xB8321A00, // 01D1 GETNGBL R12 K13
|
||||
0x88301960, // 01D2 GETMBR R12 R12 K96
|
||||
0x8C301961, // 01D3 GETMET R12 R12 K97
|
||||
0x7C300200, // 01D4 CALL R12 1
|
||||
0x8C341962, // 01D5 GETMET R13 R12 K98
|
||||
0x583C000C, // 01D6 LDCONST R15 K12
|
||||
0xB8421A00, // 01D7 GETNGBL R16 K13
|
||||
0x88402160, // 01D8 GETMBR R16 R16 K96
|
||||
0x88402163, // 01D9 GETMBR R16 R16 K99
|
||||
0x8C440964, // 01DA GETMET R17 R4 K100
|
||||
0x7C440200, // 01DB CALL R17 1
|
||||
0x7C340800, // 01DC CALL R13 4
|
||||
0x8C341962, // 01DD GETMET R13 R12 K98
|
||||
0x583C000A, // 01DE LDCONST R15 K10
|
||||
0xB8421A00, // 01DF GETNGBL R16 K13
|
||||
0x88402160, // 01E0 GETMBR R16 R16 K96
|
||||
0x88402163, // 01E1 GETMBR R16 R16 K99
|
||||
0x8C440955, // 01E2 GETMET R17 R4 K85
|
||||
0x7C440200, // 01E3 CALL R17 1
|
||||
0x7C340800, // 01E4 CALL R13 4
|
||||
0x8C341962, // 01E5 GETMET R13 R12 K98
|
||||
0x583C0065, // 01E6 LDCONST R15 K101
|
||||
0xB8421A00, // 01E7 GETNGBL R16 K13
|
||||
0x88402160, // 01E8 GETMBR R16 R16 K96
|
||||
0x88402163, // 01E9 GETMBR R16 R16 K99
|
||||
0x5C441600, // 01EA MOVE R17 R11
|
||||
0x7C340800, // 01EB CALL R13 4
|
||||
0x8C341962, // 01EC GETMET R13 R12 K98
|
||||
0x543E0003, // 01ED LDINT R15 4
|
||||
0xB8421A00, // 01EE GETNGBL R16 K13
|
||||
0x88402160, // 01EF GETMBR R16 R16 K96
|
||||
0x88402163, // 01F0 GETMBR R16 R16 K99
|
||||
0x88440934, // 01F1 GETMBR R17 R4 K52
|
||||
0x7C340800, // 01F2 CALL R13 4
|
||||
0x88340B68, // 01F3 GETMBR R13 R5 K104
|
||||
0x90127E0D, // 01F4 SETMBR R4 K63 R13
|
||||
0x8C340569, // 01F5 GETMET R13 R2 K105
|
||||
0x7C340200, // 01F6 CALL R13 1
|
||||
0x8C341B6A, // 01F7 GETMET R13 R13 K106
|
||||
0x883C093F, // 01F8 GETMBR R15 R4 K63
|
||||
0x7C340400, // 01F9 CALL R13 2
|
||||
0x8C341B6B, // 01FA GETMET R13 R13 K107
|
||||
0x7C340200, // 01FB CALL R13 1
|
||||
0x60380015, // 01FC GETGBL R14 G21
|
||||
0x7C380000, // 01FD CALL R14 0
|
||||
0x8C381D20, // 01FE GETMET R14 R14 K32
|
||||
0x8840016C, // 01FF GETMBR R16 R0 K108
|
||||
0x7C380400, // 0200 CALL R14 2
|
||||
0x8C3C096D, // 0201 GETMET R15 R4 K109
|
||||
0x7C3C0200, // 0202 CALL R15 1
|
||||
0x003C1E09, // 0203 ADD R15 R15 R9
|
||||
0x8840095A, // 0204 GETMBR R16 R4 K90
|
||||
0x003C1E10, // 0205 ADD R15 R15 R16
|
||||
0x003C1E0D, // 0206 ADD R15 R15 R13
|
||||
0x8C400522, // 0207 GETMET R16 R2 K34
|
||||
0x7C400200, // 0208 CALL R16 1
|
||||
0x8C402123, // 0209 GETMET R16 R16 K35
|
||||
0x88480924, // 020A GETMBR R18 R4 K36
|
||||
0x5C4C1E00, // 020B MOVE R19 R15
|
||||
0x5C501C00, // 020C MOVE R20 R14
|
||||
0x5456000F, // 020D LDINT R21 16
|
||||
0x7C400A00, // 020E CALL R16 5
|
||||
0x8C44193E, // 020F GETMET R17 R12 K62
|
||||
0x7C440200, // 0210 CALL R17 1
|
||||
0x8C480527, // 0211 GETMET R18 R2 K39
|
||||
0x5C502000, // 0212 MOVE R20 R16
|
||||
0x60540015, // 0213 GETGBL R21 G21
|
||||
0x7C540000, // 0214 CALL R21 0
|
||||
0x8C542B20, // 0215 GETMET R21 R21 K32
|
||||
0x885C016E, // 0216 GETMBR R23 R0 K110
|
||||
0x7C540400, // 0217 CALL R21 2
|
||||
0x60580015, // 0218 GETGBL R22 G21
|
||||
0x7C580000, // 0219 CALL R22 0
|
||||
0x605C000C, // 021A GETGBL R23 G12
|
||||
0x5C602200, // 021B MOVE R24 R17
|
||||
0x7C5C0200, // 021C CALL R23 1
|
||||
0x5462000F, // 021D LDINT R24 16
|
||||
0x7C480C00, // 021E CALL R18 6
|
||||
0x8C4C256F, // 021F GETMET R19 R18 K111
|
||||
0x5C542200, // 0220 MOVE R21 R17
|
||||
0x7C4C0400, // 0221 CALL R19 2
|
||||
0x8C502529, // 0222 GETMET R20 R18 K41
|
||||
0x7C500200, // 0223 CALL R20 1
|
||||
0x004C2614, // 0224 ADD R19 R19 R20
|
||||
0xB8521A00, // 0225 GETNGBL R20 K13
|
||||
0x8C502970, // 0226 GETMET R20 R20 K112
|
||||
0x7C500200, // 0227 CALL R20 1
|
||||
0x9052E209, // 0228 SETMBR R20 K113 R9
|
||||
0x8854092F, // 0229 GETMBR R21 R4 K47
|
||||
0x9052E415, // 022A SETMBR R20 K114 R21
|
||||
0x8854095A, // 022B GETMBR R21 R4 K90
|
||||
0x9052E615, // 022C SETMBR R20 K115 R21
|
||||
0x9052E813, // 022D SETMBR R20 K116 R19
|
||||
0x8C54293E, // 022E GETMET R21 R20 K62
|
||||
0x7C540200, // 022F CALL R21 1
|
||||
0x9012EA15, // 0230 SETMBR R4 K117 R21
|
||||
0x8C580340, // 0231 GETMET R22 R1 K64
|
||||
0x54620030, // 0232 LDINT R24 49
|
||||
0x50640200, // 0233 LDBOOL R25 1 0
|
||||
0x7C580600, // 0234 CALL R22 3
|
||||
0x8C5C2D41, // 0235 GETMET R23 R22 K65
|
||||
0x5C642A00, // 0236 MOVE R25 R21
|
||||
0x7C5C0400, // 0237 CALL R23 2
|
||||
0x88600142, // 0238 GETMBR R24 R0 K66
|
||||
0x8C603143, // 0239 GETMET R24 R24 K67
|
||||
0x5C682C00, // 023A MOVE R26 R22
|
||||
0x7C600400, // 023B CALL R24 2
|
||||
0x50600200, // 023C LDBOOL R24 1 0
|
||||
0x80043000, // 023D RET 1 R24
|
||||
0x50200200, // 023E LDBOOL R8 1 0
|
||||
0x80041000, // 023F RET 1 R8
|
||||
0x002EAC0B, // 0171 ADD R11 K86 R11
|
||||
0x54320003, // 0172 LDINT R12 4
|
||||
0x7C240600, // 0173 CALL R9 3
|
||||
0xB8260E00, // 0174 GETNGBL R9 K7
|
||||
0x8C241308, // 0175 GETMET R9 R9 K8
|
||||
0x8C2C1158, // 0176 GETMET R11 R8 K88
|
||||
0x7C2C0200, // 0177 CALL R11 1
|
||||
0x8C2C1752, // 0178 GETMET R11 R11 K82
|
||||
0x7C2C0200, // 0179 CALL R11 1
|
||||
0x002EAE0B, // 017A ADD R11 K87 R11
|
||||
0x54320003, // 017B LDINT R12 4
|
||||
0x7C240600, // 017C CALL R9 3
|
||||
0x8C240535, // 017D GETMET R9 R2 K53
|
||||
0x542E000F, // 017E LDINT R11 16
|
||||
0x7C240400, // 017F CALL R9 2
|
||||
0x90126809, // 0180 SETMBR R4 K52 R9
|
||||
0x8C240535, // 0181 GETMET R9 R2 K53
|
||||
0x542E001F, // 0182 LDINT R11 32
|
||||
0x7C240400, // 0183 CALL R9 2
|
||||
0x9012B209, // 0184 SETMBR R4 K89 R9
|
||||
0x8C24055B, // 0185 GETMET R9 R2 K91
|
||||
0x7C240200, // 0186 CALL R9 1
|
||||
0x8C24135C, // 0187 GETMET R9 R9 K92
|
||||
0x882C0959, // 0188 GETMBR R11 R4 K89
|
||||
0x7C240400, // 0189 CALL R9 2
|
||||
0x9012B409, // 018A SETMBR R4 K90 R9
|
||||
0xB8260E00, // 018B GETNGBL R9 K7
|
||||
0x8C241308, // 018C GETMET R9 R9 K8
|
||||
0x882C0959, // 018D GETMBR R11 R4 K89
|
||||
0x8C2C1752, // 018E GETMET R11 R11 K82
|
||||
0x7C2C0200, // 018F CALL R11 1
|
||||
0x002EBA0B, // 0190 ADD R11 K93 R11
|
||||
0x54320003, // 0191 LDINT R12 4
|
||||
0x7C240600, // 0192 CALL R9 3
|
||||
0xB8260E00, // 0193 GETNGBL R9 K7
|
||||
0x8C241308, // 0194 GETMET R9 R9 K8
|
||||
0x882C095A, // 0195 GETMBR R11 R4 K90
|
||||
0x8C2C1752, // 0196 GETMET R11 R11 K82
|
||||
0x7C2C0200, // 0197 CALL R11 1
|
||||
0x002EBC0B, // 0198 ADD R11 K94 R11
|
||||
0x54320003, // 0199 LDINT R12 4
|
||||
0x7C240600, // 019A CALL R9 3
|
||||
0x8C240535, // 019B GETMET R9 R2 K53
|
||||
0x542E001F, // 019C LDINT R11 32
|
||||
0x7C240400, // 019D CALL R9 2
|
||||
0x8C28055B, // 019E GETMET R10 R2 K91
|
||||
0x7C280200, // 019F CALL R10 1
|
||||
0x8C28155F, // 01A0 GETMET R10 R10 K95
|
||||
0x88300959, // 01A1 GETMBR R12 R4 K89
|
||||
0x88340B16, // 01A2 GETMBR R13 R5 K22
|
||||
0x7C280600, // 01A3 CALL R10 3
|
||||
0x9012480A, // 01A4 SETMBR R4 K36 R10
|
||||
0xB82A0E00, // 01A5 GETNGBL R10 K7
|
||||
0x8C281508, // 01A6 GETMET R10 R10 K8
|
||||
0x88300924, // 01A7 GETMBR R12 R4 K36
|
||||
0x8C301952, // 01A8 GETMET R12 R12 K82
|
||||
0x7C300200, // 01A9 CALL R12 1
|
||||
0x0032C00C, // 01AA ADD R12 K96 R12
|
||||
0x54360003, // 01AB LDINT R13 4
|
||||
0x7C280600, // 01AC CALL R10 3
|
||||
0xB82A1A00, // 01AD GETNGBL R10 K13
|
||||
0x88281561, // 01AE GETMBR R10 R10 K97
|
||||
0x8C281562, // 01AF GETMET R10 R10 K98
|
||||
0x7C280200, // 01B0 CALL R10 1
|
||||
0x8C2C1563, // 01B1 GETMET R11 R10 K99
|
||||
0x5834000C, // 01B2 LDCONST R13 K12
|
||||
0xB83A1A00, // 01B3 GETNGBL R14 K13
|
||||
0x88381D61, // 01B4 GETMBR R14 R14 K97
|
||||
0x88381D64, // 01B5 GETMBR R14 R14 K100
|
||||
0x8C3C1154, // 01B6 GETMET R15 R8 K84
|
||||
0x7C3C0200, // 01B7 CALL R15 1
|
||||
0x7C2C0800, // 01B8 CALL R11 4
|
||||
0x8C2C1563, // 01B9 GETMET R11 R10 K99
|
||||
0x5834000A, // 01BA LDCONST R13 K10
|
||||
0xB83A1A00, // 01BB GETNGBL R14 K13
|
||||
0x88381D61, // 01BC GETMBR R14 R14 K97
|
||||
0x88381D64, // 01BD GETMBR R14 R14 K100
|
||||
0x8C3C1155, // 01BE GETMET R15 R8 K85
|
||||
0x7C3C0200, // 01BF CALL R15 1
|
||||
0x7C2C0800, // 01C0 CALL R11 4
|
||||
0x8C2C1563, // 01C1 GETMET R11 R10 K99
|
||||
0x58340065, // 01C2 LDCONST R13 K101
|
||||
0xB83A1A00, // 01C3 GETNGBL R14 K13
|
||||
0x88381D61, // 01C4 GETMBR R14 R14 K97
|
||||
0x88381D64, // 01C5 GETMBR R14 R14 K100
|
||||
0x883C095A, // 01C6 GETMBR R15 R4 K90
|
||||
0x7C2C0800, // 01C7 CALL R11 4
|
||||
0x8C2C1563, // 01C8 GETMET R11 R10 K99
|
||||
0x54360003, // 01C9 LDINT R13 4
|
||||
0xB83A1A00, // 01CA GETNGBL R14 K13
|
||||
0x88381D61, // 01CB GETMBR R14 R14 K97
|
||||
0x88381D64, // 01CC GETMBR R14 R14 K100
|
||||
0x883C0B16, // 01CD GETMBR R15 R5 K22
|
||||
0x7C2C0800, // 01CE CALL R11 4
|
||||
0x8C2C055B, // 01CF GETMET R11 R2 K91
|
||||
0x7C2C0200, // 01D0 CALL R11 1
|
||||
0x8C2C1766, // 01D1 GETMET R11 R11 K102
|
||||
0x8C341151, // 01D2 GETMET R13 R8 K81
|
||||
0x7C340200, // 01D3 CALL R13 1
|
||||
0x8C38153E, // 01D4 GETMET R14 R10 K62
|
||||
0x7C380200, // 01D5 CALL R14 1
|
||||
0x7C2C0600, // 01D6 CALL R11 3
|
||||
0xB8320E00, // 01D7 GETNGBL R12 K7
|
||||
0x8C301908, // 01D8 GETMET R12 R12 K8
|
||||
0x58380067, // 01D9 LDCONST R14 K103
|
||||
0x543E0003, // 01DA LDINT R15 4
|
||||
0x7C300600, // 01DB CALL R12 3
|
||||
0xB8320E00, // 01DC GETNGBL R12 K7
|
||||
0x8C301908, // 01DD GETMET R12 R12 K8
|
||||
0x60380008, // 01DE GETGBL R14 G8
|
||||
0x8C3C1151, // 01DF GETMET R15 R8 K81
|
||||
0x7C3C0200, // 01E0 CALL R15 1
|
||||
0x7C380200, // 01E1 CALL R14 1
|
||||
0x003AD00E, // 01E2 ADD R14 K104 R14
|
||||
0x543E0003, // 01E3 LDINT R15 4
|
||||
0x7C300600, // 01E4 CALL R12 3
|
||||
0xB8320E00, // 01E5 GETNGBL R12 K7
|
||||
0x8C301908, // 01E6 GETMET R12 R12 K8
|
||||
0x60380008, // 01E7 GETGBL R14 G8
|
||||
0x5C3C1400, // 01E8 MOVE R15 R10
|
||||
0x7C380200, // 01E9 CALL R14 1
|
||||
0x003AD20E, // 01EA ADD R14 K105 R14
|
||||
0x543E0003, // 01EB LDINT R15 4
|
||||
0x7C300600, // 01EC CALL R12 3
|
||||
0xB8320E00, // 01ED GETNGBL R12 K7
|
||||
0x8C301908, // 01EE GETMET R12 R12 K8
|
||||
0x8C381752, // 01EF GETMET R14 R11 K82
|
||||
0x7C380200, // 01F0 CALL R14 1
|
||||
0x003AD40E, // 01F1 ADD R14 K106 R14
|
||||
0x543E0003, // 01F2 LDINT R15 4
|
||||
0x7C300600, // 01F3 CALL R12 3
|
||||
0xB8321A00, // 01F4 GETNGBL R12 K13
|
||||
0x88301961, // 01F5 GETMBR R12 R12 K97
|
||||
0x8C301962, // 01F6 GETMET R12 R12 K98
|
||||
0x7C300200, // 01F7 CALL R12 1
|
||||
0x8C341963, // 01F8 GETMET R13 R12 K99
|
||||
0x583C000C, // 01F9 LDCONST R15 K12
|
||||
0xB8421A00, // 01FA GETNGBL R16 K13
|
||||
0x88402161, // 01FB GETMBR R16 R16 K97
|
||||
0x88402164, // 01FC GETMBR R16 R16 K100
|
||||
0x8C441154, // 01FD GETMET R17 R8 K84
|
||||
0x7C440200, // 01FE CALL R17 1
|
||||
0x7C340800, // 01FF CALL R13 4
|
||||
0x8C341963, // 0200 GETMET R13 R12 K99
|
||||
0x583C000A, // 0201 LDCONST R15 K10
|
||||
0xB8421A00, // 0202 GETNGBL R16 K13
|
||||
0x88402161, // 0203 GETMBR R16 R16 K97
|
||||
0x88402164, // 0204 GETMBR R16 R16 K100
|
||||
0x8C441155, // 0205 GETMET R17 R8 K85
|
||||
0x7C440200, // 0206 CALL R17 1
|
||||
0x7C340800, // 0207 CALL R13 4
|
||||
0x8C341963, // 0208 GETMET R13 R12 K99
|
||||
0x583C0065, // 0209 LDCONST R15 K101
|
||||
0xB8421A00, // 020A GETNGBL R16 K13
|
||||
0x88402161, // 020B GETMBR R16 R16 K97
|
||||
0x88402164, // 020C GETMBR R16 R16 K100
|
||||
0x5C441600, // 020D MOVE R17 R11
|
||||
0x7C340800, // 020E CALL R13 4
|
||||
0x8C341963, // 020F GETMET R13 R12 K99
|
||||
0x543E0003, // 0210 LDINT R15 4
|
||||
0xB8421A00, // 0211 GETNGBL R16 K13
|
||||
0x88402161, // 0212 GETMBR R16 R16 K97
|
||||
0x88402164, // 0213 GETMBR R16 R16 K100
|
||||
0x88440934, // 0214 GETMBR R17 R4 K52
|
||||
0x7C340800, // 0215 CALL R13 4
|
||||
0xB8360E00, // 0216 GETNGBL R13 K7
|
||||
0x8C341B08, // 0217 GETMET R13 R13 K8
|
||||
0x583C0067, // 0218 LDCONST R15 K103
|
||||
0x54420003, // 0219 LDINT R16 4
|
||||
0x7C340600, // 021A CALL R13 3
|
||||
0x88340B6B, // 021B GETMBR R13 R5 K107
|
||||
0x90127E0D, // 021C SETMBR R4 K63 R13
|
||||
0xB8360E00, // 021D GETNGBL R13 K7
|
||||
0x8C341B08, // 021E GETMET R13 R13 K8
|
||||
0x883C0934, // 021F GETMBR R15 R4 K52
|
||||
0x8C3C1F52, // 0220 GETMET R15 R15 K82
|
||||
0x7C3C0200, // 0221 CALL R15 1
|
||||
0x003ED80F, // 0222 ADD R15 K108 R15
|
||||
0x54420003, // 0223 LDINT R16 4
|
||||
0x7C340600, // 0224 CALL R13 3
|
||||
0xB8360E00, // 0225 GETNGBL R13 K7
|
||||
0x8C341B08, // 0226 GETMET R13 R13 K8
|
||||
0x883C093F, // 0227 GETMBR R15 R4 K63
|
||||
0x8C3C1F52, // 0228 GETMET R15 R15 K82
|
||||
0x7C3C0200, // 0229 CALL R15 1
|
||||
0x003EDA0F, // 022A ADD R15 K109 R15
|
||||
0x54420003, // 022B LDINT R16 4
|
||||
0x7C340600, // 022C CALL R13 3
|
||||
0x8C34056E, // 022D GETMET R13 R2 K110
|
||||
0x7C340200, // 022E CALL R13 1
|
||||
0x8C341B6F, // 022F GETMET R13 R13 K111
|
||||
0x883C093F, // 0230 GETMBR R15 R4 K63
|
||||
0x7C340400, // 0231 CALL R13 2
|
||||
0x8C341B70, // 0232 GETMET R13 R13 K112
|
||||
0x7C340200, // 0233 CALL R13 1
|
||||
0xB83A0E00, // 0234 GETNGBL R14 K7
|
||||
0x8C381D08, // 0235 GETMET R14 R14 K8
|
||||
0x8C401B52, // 0236 GETMET R16 R13 K82
|
||||
0x7C400200, // 0237 CALL R16 1
|
||||
0x0042E210, // 0238 ADD R16 K113 R16
|
||||
0x54460003, // 0239 LDINT R17 4
|
||||
0x7C380600, // 023A CALL R14 3
|
||||
0x60380015, // 023B GETGBL R14 G21
|
||||
0x7C380000, // 023C CALL R14 0
|
||||
0x8C381D20, // 023D GETMET R14 R14 K32
|
||||
0x88400172, // 023E GETMBR R16 R0 K114
|
||||
0x7C380400, // 023F CALL R14 2
|
||||
0x8C3C1173, // 0240 GETMET R15 R8 K115
|
||||
0x7C3C0200, // 0241 CALL R15 1
|
||||
0x003C1E09, // 0242 ADD R15 R15 R9
|
||||
0x8840095A, // 0243 GETMBR R16 R4 K90
|
||||
0x003C1E10, // 0244 ADD R15 R15 R16
|
||||
0x003C1E0D, // 0245 ADD R15 R15 R13
|
||||
0x8C400522, // 0246 GETMET R16 R2 K34
|
||||
0x7C400200, // 0247 CALL R16 1
|
||||
0x8C402123, // 0248 GETMET R16 R16 K35
|
||||
0x88480924, // 0249 GETMBR R18 R4 K36
|
||||
0x5C4C1E00, // 024A MOVE R19 R15
|
||||
0x5C501C00, // 024B MOVE R20 R14
|
||||
0x5456000F, // 024C LDINT R21 16
|
||||
0x7C400A00, // 024D CALL R16 5
|
||||
0xB8460E00, // 024E GETNGBL R17 K7
|
||||
0x8C442308, // 024F GETMET R17 R17 K8
|
||||
0x884C0924, // 0250 GETMBR R19 R4 K36
|
||||
0x8C4C2752, // 0251 GETMET R19 R19 K82
|
||||
0x7C4C0200, // 0252 CALL R19 1
|
||||
0x004EE813, // 0253 ADD R19 K116 R19
|
||||
0x54520003, // 0254 LDINT R20 4
|
||||
0x7C440600, // 0255 CALL R17 3
|
||||
0xB8460E00, // 0256 GETNGBL R17 K7
|
||||
0x8C442308, // 0257 GETMET R17 R17 K8
|
||||
0x8C4C1F52, // 0258 GETMET R19 R15 K82
|
||||
0x7C4C0200, // 0259 CALL R19 1
|
||||
0x004EEA13, // 025A ADD R19 K117 R19
|
||||
0x54520003, // 025B LDINT R20 4
|
||||
0x7C440600, // 025C CALL R17 3
|
||||
0xB8460E00, // 025D GETNGBL R17 K7
|
||||
0x8C442308, // 025E GETMET R17 R17 K8
|
||||
0x8C4C2152, // 025F GETMET R19 R16 K82
|
||||
0x7C4C0200, // 0260 CALL R19 1
|
||||
0x004EEC13, // 0261 ADD R19 K118 R19
|
||||
0x54520003, // 0262 LDINT R20 4
|
||||
0x7C440600, // 0263 CALL R17 3
|
||||
0x8C44193E, // 0264 GETMET R17 R12 K62
|
||||
0x7C440200, // 0265 CALL R17 1
|
||||
0xB84A0E00, // 0266 GETNGBL R18 K7
|
||||
0x8C482508, // 0267 GETMET R18 R18 K8
|
||||
0x8C502352, // 0268 GETMET R20 R17 K82
|
||||
0x7C500200, // 0269 CALL R20 1
|
||||
0x0052EE14, // 026A ADD R20 K119 R20
|
||||
0x54560003, // 026B LDINT R21 4
|
||||
0x7C480600, // 026C CALL R18 3
|
||||
0x8C480527, // 026D GETMET R18 R2 K39
|
||||
0x5C502000, // 026E MOVE R20 R16
|
||||
0x60540015, // 026F GETGBL R21 G21
|
||||
0x7C540000, // 0270 CALL R21 0
|
||||
0x8C542B20, // 0271 GETMET R21 R21 K32
|
||||
0x885C0178, // 0272 GETMBR R23 R0 K120
|
||||
0x7C540400, // 0273 CALL R21 2
|
||||
0x60580015, // 0274 GETGBL R22 G21
|
||||
0x7C580000, // 0275 CALL R22 0
|
||||
0x605C000C, // 0276 GETGBL R23 G12
|
||||
0x5C602200, // 0277 MOVE R24 R17
|
||||
0x7C5C0200, // 0278 CALL R23 1
|
||||
0x5462000F, // 0279 LDINT R24 16
|
||||
0x7C480C00, // 027A CALL R18 6
|
||||
0x8C4C2579, // 027B GETMET R19 R18 K121
|
||||
0x5C542200, // 027C MOVE R21 R17
|
||||
0x7C4C0400, // 027D CALL R19 2
|
||||
0x8C502529, // 027E GETMET R20 R18 K41
|
||||
0x7C500200, // 027F CALL R20 1
|
||||
0x004C2614, // 0280 ADD R19 R19 R20
|
||||
0xB8520E00, // 0281 GETNGBL R20 K7
|
||||
0x8C502908, // 0282 GETMET R20 R20 K8
|
||||
0x8C582752, // 0283 GETMET R22 R19 K82
|
||||
0x7C580200, // 0284 CALL R22 1
|
||||
0x005AF416, // 0285 ADD R22 K122 R22
|
||||
0x545E0003, // 0286 LDINT R23 4
|
||||
0x7C500600, // 0287 CALL R20 3
|
||||
0xB8520E00, // 0288 GETNGBL R20 K7
|
||||
0x8C502908, // 0289 GETMET R20 R20 K8
|
||||
0x58580067, // 028A LDCONST R22 K103
|
||||
0x545E0003, // 028B LDINT R23 4
|
||||
0x7C500600, // 028C CALL R20 3
|
||||
0xB8521A00, // 028D GETNGBL R20 K13
|
||||
0x8C50297B, // 028E GETMET R20 R20 K123
|
||||
0x7C500200, // 028F CALL R20 1
|
||||
0x9052F809, // 0290 SETMBR R20 K124 R9
|
||||
0x8854092F, // 0291 GETMBR R21 R4 K47
|
||||
0x9052FA15, // 0292 SETMBR R20 K125 R21
|
||||
0x8854095A, // 0293 GETMBR R21 R4 K90
|
||||
0x9052FC15, // 0294 SETMBR R20 K126 R21
|
||||
0x9052FE13, // 0295 SETMBR R20 K127 R19
|
||||
0xB8560E00, // 0296 GETNGBL R21 K7
|
||||
0x8C542B08, // 0297 GETMET R21 R21 K8
|
||||
0xB85E1A00, // 0298 GETNGBL R23 K13
|
||||
0x8C5C2F14, // 0299 GETMET R23 R23 K20
|
||||
0x5C642800, // 029A MOVE R25 R20
|
||||
0x7C5C0400, // 029B CALL R23 2
|
||||
0x005F0017, // 029C ADD R23 K128 R23
|
||||
0x54620003, // 029D LDINT R24 4
|
||||
0x7C540600, // 029E CALL R21 3
|
||||
0x8C54293E, // 029F GETMET R21 R20 K62
|
||||
0x7C540200, // 02A0 CALL R21 1
|
||||
0x90130215, // 02A1 SETMBR R4 K129 R21
|
||||
0x8C580340, // 02A2 GETMET R22 R1 K64
|
||||
0x54620030, // 02A3 LDINT R24 49
|
||||
0x50640200, // 02A4 LDBOOL R25 1 0
|
||||
0x7C580600, // 02A5 CALL R22 3
|
||||
0x8C5C2D41, // 02A6 GETMET R23 R22 K65
|
||||
0x5C642A00, // 02A7 MOVE R25 R21
|
||||
0x7C5C0400, // 02A8 CALL R23 2
|
||||
0x88600142, // 02A9 GETMBR R24 R0 K66
|
||||
0x8C603143, // 02AA GETMET R24 R24 K67
|
||||
0x5C682C00, // 02AB MOVE R26 R22
|
||||
0x7C600400, // 02AC CALL R24 2
|
||||
0x50600200, // 02AD LDBOOL R24 1 0
|
||||
0x80043000, // 02AE RET 1 R24
|
||||
0x50200200, // 02AF LDBOOL R8 1 0
|
||||
0x80041000, // 02B0 RET 1 R8
|
||||
})
|
||||
)
|
||||
);
|
||||
|
@ -4652,7 +4652,7 @@ be_local_closure(Matter_Device_msg_received, /* name */
|
||||
********************************************************************/
|
||||
be_local_closure(Matter_Device_start_operational_discovery, /* name */
|
||||
be_nested_proto(
|
||||
9, /* nstack */
|
||||
8, /* nstack */
|
||||
2, /* argc */
|
||||
2, /* varg */
|
||||
0, /* has upvals */
|
||||
@ -4660,20 +4660,18 @@ be_local_closure(Matter_Device_start_operational_discovery, /* name */
|
||||
0, /* has sup protos */
|
||||
NULL, /* no sub protos */
|
||||
1, /* has constants */
|
||||
( &(const bvalue[ 9]) { /* constants */
|
||||
( &(const bvalue[ 7]) { /* constants */
|
||||
/* K0 */ be_nested_str_weak(crypto),
|
||||
/* K1 */ be_nested_str_weak(mdns),
|
||||
/* K2 */ be_nested_str_weak(string),
|
||||
/* K3 */ be_nested_str_weak(stop_basic_commissioning),
|
||||
/* K4 */ be_nested_str_weak(root_w0),
|
||||
/* K5 */ be_nested_str_weak(root_L),
|
||||
/* K6 */ be_nested_str_weak(set_expire_in_seconds),
|
||||
/* K7 */ be_nested_str_weak(mdns_announce_op_discovery),
|
||||
/* K8 */ be_nested_str_weak(get_fabric),
|
||||
/* K6 */ be_nested_str_weak(mdns_announce_op_discovery),
|
||||
}),
|
||||
be_str_weak(start_operational_discovery),
|
||||
&be_const_str_solidified,
|
||||
( &(const binstruction[17]) { /* code */
|
||||
( &(const binstruction[13]) { /* code */
|
||||
0xA40A0000, // 0000 IMPORT R2 K0
|
||||
0xA40E0200, // 0001 IMPORT R3 K1
|
||||
0xA4120400, // 0002 IMPORT R4 K2
|
||||
@ -4683,14 +4681,10 @@ be_local_closure(Matter_Device_start_operational_discovery, /* name */
|
||||
0x90020805, // 0006 SETMBR R0 K4 R5
|
||||
0x4C140000, // 0007 LDNIL R5
|
||||
0x90020A05, // 0008 SETMBR R0 K5 R5
|
||||
0x8C140306, // 0009 GETMET R5 R1 K6
|
||||
0x541E003B, // 000A LDINT R7 60
|
||||
0x8C140106, // 0009 GETMET R5 R0 K6
|
||||
0x5C1C0200, // 000A MOVE R7 R1
|
||||
0x7C140400, // 000B CALL R5 2
|
||||
0x8C140107, // 000C GETMET R5 R0 K7
|
||||
0x8C1C0308, // 000D GETMET R7 R1 K8
|
||||
0x7C1C0200, // 000E CALL R7 1
|
||||
0x7C140400, // 000F CALL R5 2
|
||||
0x80000000, // 0010 RET 0
|
||||
0x80000000, // 000C RET 0
|
||||
})
|
||||
)
|
||||
);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -67,7 +67,7 @@ be_local_closure(Matter_IM_expire_sendqueue, /* name */
|
||||
********************************************************************/
|
||||
be_local_closure(Matter_IM_process_invoke_request, /* name */
|
||||
be_nested_proto(
|
||||
21, /* nstack */
|
||||
22, /* nstack */
|
||||
3, /* argc */
|
||||
2, /* varg */
|
||||
0, /* has upvals */
|
||||
@ -123,7 +123,7 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
|
||||
}),
|
||||
be_str_weak(process_invoke_request),
|
||||
&be_const_str_solidified,
|
||||
( &(const binstruction[270]) { /* code */
|
||||
( &(const binstruction[271]) { /* code */
|
||||
0xA40E0000, // 0000 IMPORT R3 K0
|
||||
0xB8120200, // 0001 GETNGBL R4 K1
|
||||
0x8C100902, // 0002 GETMET R4 R4 K2
|
||||
@ -137,7 +137,7 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
|
||||
0x88180B05, // 000A GETMBR R6 R5 K5
|
||||
0x4C1C0000, // 000B LDNIL R7
|
||||
0x20180C07, // 000C NE R6 R6 R7
|
||||
0x781A00FE, // 000D JMPF R6 #010D
|
||||
0x781A00FF, // 000D JMPF R6 #010E
|
||||
0xB81A0200, // 000E GETNGBL R6 K1
|
||||
0x8C180D06, // 000F GETMET R6 R6 K6
|
||||
0x7C180200, // 0010 CALL R6 1
|
||||
@ -149,7 +149,7 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
|
||||
0x601C0010, // 0016 GETGBL R7 G16
|
||||
0x88200B05, // 0017 GETMBR R8 R5 K5
|
||||
0x7C1C0200, // 0018 CALL R7 1
|
||||
0xA80200E1, // 0019 EXBLK 0 #00FC
|
||||
0xA80200E2, // 0019 EXBLK 0 #00FD
|
||||
0x5C200E00, // 001A MOVE R8 R7
|
||||
0x7C200000, // 001B CALL R8 0
|
||||
0x8824110A, // 001C GETMBR R9 R8 K10
|
||||
@ -169,231 +169,232 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
|
||||
0x882C090B, // 002A GETMBR R11 R4 K11
|
||||
0x8830090C, // 002B GETMBR R12 R4 K12
|
||||
0x7C240600, // 002C CALL R9 3
|
||||
0x88280110, // 002D GETMBR R10 R0 K16
|
||||
0x8C281511, // 002E GETMET R10 R10 K17
|
||||
0x88300312, // 002F GETMBR R12 R1 K18
|
||||
0x88341113, // 0030 GETMBR R13 R8 K19
|
||||
0x5C380800, // 0031 MOVE R14 R4
|
||||
0x7C280800, // 0032 CALL R10 4
|
||||
0x882C0914, // 0033 GETMBR R11 R4 K20
|
||||
0x4C300000, // 0034 LDNIL R12
|
||||
0x202C160C, // 0035 NE R11 R11 R12
|
||||
0x782E0005, // 0036 JMPF R11 #003D
|
||||
0x602C0008, // 0037 GETGBL R11 G8
|
||||
0x88300914, // 0038 GETMBR R12 R4 K20
|
||||
0x7C2C0200, // 0039 CALL R11 1
|
||||
0x002E2A0B, // 003A ADD R11 K21 R11
|
||||
0x002C1716, // 003B ADD R11 R11 K22
|
||||
0x70020000, // 003C JMP #003E
|
||||
0x582C0017, // 003D LDCONST R11 K23
|
||||
0xB8323000, // 003E GETNGBL R12 K24
|
||||
0x8C301914, // 003F GETMET R12 R12 K20
|
||||
0x8C380719, // 0040 GETMET R14 R3 K25
|
||||
0x5840001A, // 0041 LDCONST R16 K26
|
||||
0x88440312, // 0042 GETMBR R17 R1 K18
|
||||
0x8844231B, // 0043 GETMBR R17 R17 K27
|
||||
0x60480008, // 0044 GETGBL R18 G8
|
||||
0x5C4C0800, // 0045 MOVE R19 R4
|
||||
0x7C480200, // 0046 CALL R18 1
|
||||
0x78260001, // 0047 JMPF R9 #004A
|
||||
0x5C4C1200, // 0048 MOVE R19 R9
|
||||
0x70020000, // 0049 JMP #004B
|
||||
0x584C0017, // 004A LDCONST R19 K23
|
||||
0x5C501600, // 004B MOVE R20 R11
|
||||
0x7C380C00, // 004C CALL R14 6
|
||||
0x583C001C, // 004D LDCONST R15 K28
|
||||
0x7C300600, // 004E CALL R12 3
|
||||
0x4C300000, // 004F LDNIL R12
|
||||
0x9012280C, // 0050 SETMBR R4 K20 R12
|
||||
0xB8320200, // 0051 GETNGBL R12 K1
|
||||
0x8C30191D, // 0052 GETMET R12 R12 K29
|
||||
0x7C300200, // 0053 CALL R12 1
|
||||
0x50340200, // 0054 LDBOOL R13 1 0
|
||||
0x1C34140D, // 0055 EQ R13 R10 R13
|
||||
0x74360004, // 0056 JMPT R13 #005C
|
||||
0x8834090D, // 0057 GETMBR R13 R4 K13
|
||||
0xB83A0200, // 0058 GETNGBL R14 K1
|
||||
0x88381D1E, // 0059 GETMBR R14 R14 K30
|
||||
0x1C341A0E, // 005A EQ R13 R13 R14
|
||||
0x7836002D, // 005B JMPF R13 #008A
|
||||
0xB8360200, // 005C GETNGBL R13 K1
|
||||
0x8C341B1F, // 005D GETMET R13 R13 K31
|
||||
0x7C340200, // 005E CALL R13 1
|
||||
0x90321A0D, // 005F SETMBR R12 K13 R13
|
||||
0x8834190D, // 0060 GETMBR R13 R12 K13
|
||||
0xB83A0200, // 0061 GETNGBL R14 K1
|
||||
0x8C381D20, // 0062 GETMET R14 R14 K32
|
||||
0x7C380200, // 0063 CALL R14 1
|
||||
0x9036140E, // 0064 SETMBR R13 K10 R14
|
||||
0x8834190D, // 0065 GETMBR R13 R12 K13
|
||||
0x88341B0A, // 0066 GETMBR R13 R13 K10
|
||||
0x88380909, // 0067 GETMBR R14 R4 K9
|
||||
0x9036120E, // 0068 SETMBR R13 K9 R14
|
||||
0x8834190D, // 0069 GETMBR R13 R12 K13
|
||||
0x88341B0A, // 006A GETMBR R13 R13 K10
|
||||
0x8838090B, // 006B GETMBR R14 R4 K11
|
||||
0x9036160E, // 006C SETMBR R13 K11 R14
|
||||
0x8834190D, // 006D GETMBR R13 R12 K13
|
||||
0x88341B0A, // 006E GETMBR R13 R13 K10
|
||||
0x8838090C, // 006F GETMBR R14 R4 K12
|
||||
0x9036180E, // 0070 SETMBR R13 K12 R14
|
||||
0x8834190D, // 0071 GETMBR R13 R12 K13
|
||||
0xB83A0200, // 0072 GETNGBL R14 K1
|
||||
0x8C381D21, // 0073 GETMET R14 R14 K33
|
||||
0x7C380200, // 0074 CALL R14 1
|
||||
0x90361A0E, // 0075 SETMBR R13 K13 R14
|
||||
0x8834190D, // 0076 GETMBR R13 R12 K13
|
||||
0x88341B0D, // 0077 GETMBR R13 R13 K13
|
||||
0xB83A0200, // 0078 GETNGBL R14 K1
|
||||
0x88381D1E, // 0079 GETMBR R14 R14 K30
|
||||
0x90361A0E, // 007A SETMBR R13 K13 R14
|
||||
0x88340D08, // 007B GETMBR R13 R6 K8
|
||||
0x8C341B22, // 007C GETMET R13 R13 K34
|
||||
0x5C3C1800, // 007D MOVE R15 R12
|
||||
0x7C340400, // 007E CALL R13 2
|
||||
0xB8363000, // 007F GETNGBL R13 K24
|
||||
0x8C341B14, // 0080 GETMET R13 R13 K20
|
||||
0x8C3C0719, // 0081 GETMET R15 R3 K25
|
||||
0x58440023, // 0082 LDCONST R17 K35
|
||||
0x88480312, // 0083 GETMBR R18 R1 K18
|
||||
0x8848251B, // 0084 GETMBR R18 R18 K27
|
||||
0x884C0324, // 0085 GETMBR R19 R1 K36
|
||||
0x7C3C0800, // 0086 CALL R15 4
|
||||
0x5840001C, // 0087 LDCONST R16 K28
|
||||
0x7C340600, // 0088 CALL R13 3
|
||||
0x70020070, // 0089 JMP #00FB
|
||||
0x4C340000, // 008A LDNIL R13
|
||||
0x2034140D, // 008B NE R13 R10 R13
|
||||
0x78360031, // 008C JMPF R13 #00BF
|
||||
0xB8360200, // 008D GETNGBL R13 K1
|
||||
0x8C341B25, // 008E GETMET R13 R13 K37
|
||||
0x7C340200, // 008F CALL R13 1
|
||||
0x9032180D, // 0090 SETMBR R12 K12 R13
|
||||
0x8834190C, // 0091 GETMBR R13 R12 K12
|
||||
0xB83A0200, // 0092 GETNGBL R14 K1
|
||||
0x8C381D20, // 0093 GETMET R14 R14 K32
|
||||
0x7C380200, // 0094 CALL R14 1
|
||||
0x9036140E, // 0095 SETMBR R13 K10 R14
|
||||
0x8834190C, // 0096 GETMBR R13 R12 K12
|
||||
0x88341B0A, // 0097 GETMBR R13 R13 K10
|
||||
0x88380909, // 0098 GETMBR R14 R4 K9
|
||||
0x9036120E, // 0099 SETMBR R13 K9 R14
|
||||
0x8834190C, // 009A GETMBR R13 R12 K12
|
||||
0x88341B0A, // 009B GETMBR R13 R13 K10
|
||||
0x8838090B, // 009C GETMBR R14 R4 K11
|
||||
0x9036160E, // 009D SETMBR R13 K11 R14
|
||||
0x8834190C, // 009E GETMBR R13 R12 K12
|
||||
0x88341B0A, // 009F GETMBR R13 R13 K10
|
||||
0x8838090C, // 00A0 GETMBR R14 R4 K12
|
||||
0x9036180E, // 00A1 SETMBR R13 K12 R14
|
||||
0x8834190C, // 00A2 GETMBR R13 R12 K12
|
||||
0x9036260A, // 00A3 SETMBR R13 K19 R10
|
||||
0x88340D08, // 00A4 GETMBR R13 R6 K8
|
||||
0x8C341B22, // 00A5 GETMET R13 R13 K34
|
||||
0x5C3C1800, // 00A6 MOVE R15 R12
|
||||
0x7C340400, // 00A7 CALL R13 2
|
||||
0xB8360200, // 00A8 GETNGBL R13 K1
|
||||
0x8C341B0F, // 00A9 GETMET R13 R13 K15
|
||||
0x883C090B, // 00AA GETMBR R15 R4 K11
|
||||
0x8840090C, // 00AB GETMBR R16 R4 K12
|
||||
0x7C340600, // 00AC CALL R13 3
|
||||
0x5C241A00, // 00AD MOVE R9 R13
|
||||
0xB8363000, // 00AE GETNGBL R13 K24
|
||||
0x8C341B14, // 00AF GETMET R13 R13 K20
|
||||
0x8C3C0719, // 00B0 GETMET R15 R3 K25
|
||||
0x58440026, // 00B1 LDCONST R17 K38
|
||||
0x88480312, // 00B2 GETMBR R18 R1 K18
|
||||
0x8848251B, // 00B3 GETMBR R18 R18 K27
|
||||
0x604C0008, // 00B4 GETGBL R19 G8
|
||||
0x5C500800, // 00B5 MOVE R20 R4
|
||||
0x7C4C0200, // 00B6 CALL R19 1
|
||||
0x78260001, // 00B7 JMPF R9 #00BA
|
||||
0x5C501200, // 00B8 MOVE R20 R9
|
||||
0x70020000, // 00B9 JMP #00BB
|
||||
0x58500017, // 00BA LDCONST R20 K23
|
||||
0x7C3C0A00, // 00BB CALL R15 5
|
||||
0x5840001C, // 00BC LDCONST R16 K28
|
||||
0x7C340600, // 00BD CALL R13 3
|
||||
0x7002003B, // 00BE JMP #00FB
|
||||
0x8834090D, // 00BF GETMBR R13 R4 K13
|
||||
0x4C380000, // 00C0 LDNIL R14
|
||||
0x20341A0E, // 00C1 NE R13 R13 R14
|
||||
0x7836002D, // 00C2 JMPF R13 #00F1
|
||||
0xB8360200, // 00C3 GETNGBL R13 K1
|
||||
0x8C341B1F, // 00C4 GETMET R13 R13 K31
|
||||
0x7C340200, // 00C5 CALL R13 1
|
||||
0x90321A0D, // 00C6 SETMBR R12 K13 R13
|
||||
0x8834190D, // 00C7 GETMBR R13 R12 K13
|
||||
0xB83A0200, // 00C8 GETNGBL R14 K1
|
||||
0x8C381D20, // 00C9 GETMET R14 R14 K32
|
||||
0x7C380200, // 00CA CALL R14 1
|
||||
0x9036140E, // 00CB SETMBR R13 K10 R14
|
||||
0x8834190D, // 00CC GETMBR R13 R12 K13
|
||||
0x88341B0A, // 00CD GETMBR R13 R13 K10
|
||||
0x88380909, // 00CE GETMBR R14 R4 K9
|
||||
0x9036120E, // 00CF SETMBR R13 K9 R14
|
||||
0x8834190D, // 00D0 GETMBR R13 R12 K13
|
||||
0x88341B0A, // 00D1 GETMBR R13 R13 K10
|
||||
0x8838090B, // 00D2 GETMBR R14 R4 K11
|
||||
0x9036160E, // 00D3 SETMBR R13 K11 R14
|
||||
0x8834190D, // 00D4 GETMBR R13 R12 K13
|
||||
0x88341B0A, // 00D5 GETMBR R13 R13 K10
|
||||
0x8838090C, // 00D6 GETMBR R14 R4 K12
|
||||
0x9036180E, // 00D7 SETMBR R13 K12 R14
|
||||
0x8834190D, // 00D8 GETMBR R13 R12 K13
|
||||
0xB83A0200, // 00D9 GETNGBL R14 K1
|
||||
0x8C381D21, // 00DA GETMET R14 R14 K33
|
||||
0x7C380200, // 00DB CALL R14 1
|
||||
0x90361A0E, // 00DC SETMBR R13 K13 R14
|
||||
0x8834190D, // 00DD GETMBR R13 R12 K13
|
||||
0x88341B0D, // 00DE GETMBR R13 R13 K13
|
||||
0x8838090D, // 00DF GETMBR R14 R4 K13
|
||||
0x90361A0E, // 00E0 SETMBR R13 K13 R14
|
||||
0x88340D08, // 00E1 GETMBR R13 R6 K8
|
||||
0x8C341B22, // 00E2 GETMET R13 R13 K34
|
||||
0x5C3C1800, // 00E3 MOVE R15 R12
|
||||
0x7C340400, // 00E4 CALL R13 2
|
||||
0xB8363000, // 00E5 GETNGBL R13 K24
|
||||
0x8C341B14, // 00E6 GETMET R13 R13 K20
|
||||
0x8C3C0719, // 00E7 GETMET R15 R3 K25
|
||||
0x58440027, // 00E8 LDCONST R17 K39
|
||||
0x88480312, // 00E9 GETMBR R18 R1 K18
|
||||
0x8848251B, // 00EA GETMBR R18 R18 K27
|
||||
0x884C090D, // 00EB GETMBR R19 R4 K13
|
||||
0x88500324, // 00EC GETMBR R20 R1 K36
|
||||
0x7C3C0A00, // 00ED CALL R15 5
|
||||
0x5840001C, // 00EE LDCONST R16 K28
|
||||
0x7C340600, // 00EF CALL R13 3
|
||||
0x70020009, // 00F0 JMP #00FB
|
||||
0xB8363000, // 00F1 GETNGBL R13 K24
|
||||
0x8C341B14, // 00F2 GETMET R13 R13 K20
|
||||
0x8C3C0719, // 00F3 GETMET R15 R3 K25
|
||||
0x58440028, // 00F4 LDCONST R17 K40
|
||||
0x88480312, // 00F5 GETMBR R18 R1 K18
|
||||
0x8848251B, // 00F6 GETMBR R18 R18 K27
|
||||
0x884C0324, // 00F7 GETMBR R19 R1 K36
|
||||
0x7C3C0800, // 00F8 CALL R15 4
|
||||
0x5840001C, // 00F9 LDCONST R16 K28
|
||||
0x7C340600, // 00FA CALL R13 3
|
||||
0x7001FF1D, // 00FB JMP #001A
|
||||
0x581C0029, // 00FC LDCONST R7 K41
|
||||
0xAC1C0200, // 00FD CATCH R7 1 0
|
||||
0xB0080000, // 00FE RAISE 2 R0 R0
|
||||
0x601C000C, // 00FF GETGBL R7 G12
|
||||
0x88200D08, // 0100 GETMBR R8 R6 K8
|
||||
0x7C1C0200, // 0101 CALL R7 1
|
||||
0x241C0F2A, // 0102 GT R7 R7 K42
|
||||
0x781E0004, // 0103 JMPF R7 #0109
|
||||
0x8C1C012B, // 0104 GETMET R7 R0 K43
|
||||
0x5C240200, // 0105 MOVE R9 R1
|
||||
0x5C280C00, // 0106 MOVE R10 R6
|
||||
0x7C1C0600, // 0107 CALL R7 3
|
||||
0x70020001, // 0108 JMP #010B
|
||||
0x501C0000, // 0109 LDBOOL R7 0 0
|
||||
0x80040E00, // 010A RET 1 R7
|
||||
0x501C0200, // 010B LDBOOL R7 1 0
|
||||
0x80040E00, // 010C RET 1 R7
|
||||
0x80000000, // 010D RET 0
|
||||
0x60280008, // 002D GETGBL R10 G8
|
||||
0x5C2C0800, // 002E MOVE R11 R4
|
||||
0x7C280200, // 002F CALL R10 1
|
||||
0x882C0110, // 0030 GETMBR R11 R0 K16
|
||||
0x8C2C1711, // 0031 GETMET R11 R11 K17
|
||||
0x88340312, // 0032 GETMBR R13 R1 K18
|
||||
0x88381113, // 0033 GETMBR R14 R8 K19
|
||||
0x5C3C0800, // 0034 MOVE R15 R4
|
||||
0x7C2C0800, // 0035 CALL R11 4
|
||||
0x88300914, // 0036 GETMBR R12 R4 K20
|
||||
0x4C340000, // 0037 LDNIL R13
|
||||
0x2030180D, // 0038 NE R12 R12 R13
|
||||
0x78320005, // 0039 JMPF R12 #0040
|
||||
0x60300008, // 003A GETGBL R12 G8
|
||||
0x88340914, // 003B GETMBR R13 R4 K20
|
||||
0x7C300200, // 003C CALL R12 1
|
||||
0x00322A0C, // 003D ADD R12 K21 R12
|
||||
0x00301916, // 003E ADD R12 R12 K22
|
||||
0x70020000, // 003F JMP #0041
|
||||
0x58300017, // 0040 LDCONST R12 K23
|
||||
0xB8363000, // 0041 GETNGBL R13 K24
|
||||
0x8C341B14, // 0042 GETMET R13 R13 K20
|
||||
0x8C3C0719, // 0043 GETMET R15 R3 K25
|
||||
0x5844001A, // 0044 LDCONST R17 K26
|
||||
0x88480312, // 0045 GETMBR R18 R1 K18
|
||||
0x8848251B, // 0046 GETMBR R18 R18 K27
|
||||
0x5C4C1400, // 0047 MOVE R19 R10
|
||||
0x78260001, // 0048 JMPF R9 #004B
|
||||
0x5C501200, // 0049 MOVE R20 R9
|
||||
0x70020000, // 004A JMP #004C
|
||||
0x58500017, // 004B LDCONST R20 K23
|
||||
0x5C541800, // 004C MOVE R21 R12
|
||||
0x7C3C0C00, // 004D CALL R15 6
|
||||
0x5840001C, // 004E LDCONST R16 K28
|
||||
0x7C340600, // 004F CALL R13 3
|
||||
0x4C340000, // 0050 LDNIL R13
|
||||
0x9012280D, // 0051 SETMBR R4 K20 R13
|
||||
0xB8360200, // 0052 GETNGBL R13 K1
|
||||
0x8C341B1D, // 0053 GETMET R13 R13 K29
|
||||
0x7C340200, // 0054 CALL R13 1
|
||||
0x50380200, // 0055 LDBOOL R14 1 0
|
||||
0x1C38160E, // 0056 EQ R14 R11 R14
|
||||
0x743A0004, // 0057 JMPT R14 #005D
|
||||
0x8838090D, // 0058 GETMBR R14 R4 K13
|
||||
0xB83E0200, // 0059 GETNGBL R15 K1
|
||||
0x883C1F1E, // 005A GETMBR R15 R15 K30
|
||||
0x1C381C0F, // 005B EQ R14 R14 R15
|
||||
0x783A002D, // 005C JMPF R14 #008B
|
||||
0xB83A0200, // 005D GETNGBL R14 K1
|
||||
0x8C381D1F, // 005E GETMET R14 R14 K31
|
||||
0x7C380200, // 005F CALL R14 1
|
||||
0x90361A0E, // 0060 SETMBR R13 K13 R14
|
||||
0x88381B0D, // 0061 GETMBR R14 R13 K13
|
||||
0xB83E0200, // 0062 GETNGBL R15 K1
|
||||
0x8C3C1F20, // 0063 GETMET R15 R15 K32
|
||||
0x7C3C0200, // 0064 CALL R15 1
|
||||
0x903A140F, // 0065 SETMBR R14 K10 R15
|
||||
0x88381B0D, // 0066 GETMBR R14 R13 K13
|
||||
0x88381D0A, // 0067 GETMBR R14 R14 K10
|
||||
0x883C0909, // 0068 GETMBR R15 R4 K9
|
||||
0x903A120F, // 0069 SETMBR R14 K9 R15
|
||||
0x88381B0D, // 006A GETMBR R14 R13 K13
|
||||
0x88381D0A, // 006B GETMBR R14 R14 K10
|
||||
0x883C090B, // 006C GETMBR R15 R4 K11
|
||||
0x903A160F, // 006D SETMBR R14 K11 R15
|
||||
0x88381B0D, // 006E GETMBR R14 R13 K13
|
||||
0x88381D0A, // 006F GETMBR R14 R14 K10
|
||||
0x883C090C, // 0070 GETMBR R15 R4 K12
|
||||
0x903A180F, // 0071 SETMBR R14 K12 R15
|
||||
0x88381B0D, // 0072 GETMBR R14 R13 K13
|
||||
0xB83E0200, // 0073 GETNGBL R15 K1
|
||||
0x8C3C1F21, // 0074 GETMET R15 R15 K33
|
||||
0x7C3C0200, // 0075 CALL R15 1
|
||||
0x903A1A0F, // 0076 SETMBR R14 K13 R15
|
||||
0x88381B0D, // 0077 GETMBR R14 R13 K13
|
||||
0x88381D0D, // 0078 GETMBR R14 R14 K13
|
||||
0xB83E0200, // 0079 GETNGBL R15 K1
|
||||
0x883C1F1E, // 007A GETMBR R15 R15 K30
|
||||
0x903A1A0F, // 007B SETMBR R14 K13 R15
|
||||
0x88380D08, // 007C GETMBR R14 R6 K8
|
||||
0x8C381D22, // 007D GETMET R14 R14 K34
|
||||
0x5C401A00, // 007E MOVE R16 R13
|
||||
0x7C380400, // 007F CALL R14 2
|
||||
0xB83A3000, // 0080 GETNGBL R14 K24
|
||||
0x8C381D14, // 0081 GETMET R14 R14 K20
|
||||
0x8C400719, // 0082 GETMET R16 R3 K25
|
||||
0x58480023, // 0083 LDCONST R18 K35
|
||||
0x884C0312, // 0084 GETMBR R19 R1 K18
|
||||
0x884C271B, // 0085 GETMBR R19 R19 K27
|
||||
0x88500324, // 0086 GETMBR R20 R1 K36
|
||||
0x7C400800, // 0087 CALL R16 4
|
||||
0x5844001C, // 0088 LDCONST R17 K28
|
||||
0x7C380600, // 0089 CALL R14 3
|
||||
0x70020070, // 008A JMP #00FC
|
||||
0x4C380000, // 008B LDNIL R14
|
||||
0x2038160E, // 008C NE R14 R11 R14
|
||||
0x783A0031, // 008D JMPF R14 #00C0
|
||||
0xB83A0200, // 008E GETNGBL R14 K1
|
||||
0x8C381D25, // 008F GETMET R14 R14 K37
|
||||
0x7C380200, // 0090 CALL R14 1
|
||||
0x9036180E, // 0091 SETMBR R13 K12 R14
|
||||
0x88381B0C, // 0092 GETMBR R14 R13 K12
|
||||
0xB83E0200, // 0093 GETNGBL R15 K1
|
||||
0x8C3C1F20, // 0094 GETMET R15 R15 K32
|
||||
0x7C3C0200, // 0095 CALL R15 1
|
||||
0x903A140F, // 0096 SETMBR R14 K10 R15
|
||||
0x88381B0C, // 0097 GETMBR R14 R13 K12
|
||||
0x88381D0A, // 0098 GETMBR R14 R14 K10
|
||||
0x883C0909, // 0099 GETMBR R15 R4 K9
|
||||
0x903A120F, // 009A SETMBR R14 K9 R15
|
||||
0x88381B0C, // 009B GETMBR R14 R13 K12
|
||||
0x88381D0A, // 009C GETMBR R14 R14 K10
|
||||
0x883C090B, // 009D GETMBR R15 R4 K11
|
||||
0x903A160F, // 009E SETMBR R14 K11 R15
|
||||
0x88381B0C, // 009F GETMBR R14 R13 K12
|
||||
0x88381D0A, // 00A0 GETMBR R14 R14 K10
|
||||
0x883C090C, // 00A1 GETMBR R15 R4 K12
|
||||
0x903A180F, // 00A2 SETMBR R14 K12 R15
|
||||
0x88381B0C, // 00A3 GETMBR R14 R13 K12
|
||||
0x903A260B, // 00A4 SETMBR R14 K19 R11
|
||||
0x88380D08, // 00A5 GETMBR R14 R6 K8
|
||||
0x8C381D22, // 00A6 GETMET R14 R14 K34
|
||||
0x5C401A00, // 00A7 MOVE R16 R13
|
||||
0x7C380400, // 00A8 CALL R14 2
|
||||
0xB83A0200, // 00A9 GETNGBL R14 K1
|
||||
0x8C381D0F, // 00AA GETMET R14 R14 K15
|
||||
0x8840090B, // 00AB GETMBR R16 R4 K11
|
||||
0x8844090C, // 00AC GETMBR R17 R4 K12
|
||||
0x7C380600, // 00AD CALL R14 3
|
||||
0x5C241C00, // 00AE MOVE R9 R14
|
||||
0xB83A3000, // 00AF GETNGBL R14 K24
|
||||
0x8C381D14, // 00B0 GETMET R14 R14 K20
|
||||
0x8C400719, // 00B1 GETMET R16 R3 K25
|
||||
0x58480026, // 00B2 LDCONST R18 K38
|
||||
0x884C0312, // 00B3 GETMBR R19 R1 K18
|
||||
0x884C271B, // 00B4 GETMBR R19 R19 K27
|
||||
0x60500008, // 00B5 GETGBL R20 G8
|
||||
0x5C540800, // 00B6 MOVE R21 R4
|
||||
0x7C500200, // 00B7 CALL R20 1
|
||||
0x78260001, // 00B8 JMPF R9 #00BB
|
||||
0x5C541200, // 00B9 MOVE R21 R9
|
||||
0x70020000, // 00BA JMP #00BC
|
||||
0x58540017, // 00BB LDCONST R21 K23
|
||||
0x7C400A00, // 00BC CALL R16 5
|
||||
0x5844001C, // 00BD LDCONST R17 K28
|
||||
0x7C380600, // 00BE CALL R14 3
|
||||
0x7002003B, // 00BF JMP #00FC
|
||||
0x8838090D, // 00C0 GETMBR R14 R4 K13
|
||||
0x4C3C0000, // 00C1 LDNIL R15
|
||||
0x20381C0F, // 00C2 NE R14 R14 R15
|
||||
0x783A002D, // 00C3 JMPF R14 #00F2
|
||||
0xB83A0200, // 00C4 GETNGBL R14 K1
|
||||
0x8C381D1F, // 00C5 GETMET R14 R14 K31
|
||||
0x7C380200, // 00C6 CALL R14 1
|
||||
0x90361A0E, // 00C7 SETMBR R13 K13 R14
|
||||
0x88381B0D, // 00C8 GETMBR R14 R13 K13
|
||||
0xB83E0200, // 00C9 GETNGBL R15 K1
|
||||
0x8C3C1F20, // 00CA GETMET R15 R15 K32
|
||||
0x7C3C0200, // 00CB CALL R15 1
|
||||
0x903A140F, // 00CC SETMBR R14 K10 R15
|
||||
0x88381B0D, // 00CD GETMBR R14 R13 K13
|
||||
0x88381D0A, // 00CE GETMBR R14 R14 K10
|
||||
0x883C0909, // 00CF GETMBR R15 R4 K9
|
||||
0x903A120F, // 00D0 SETMBR R14 K9 R15
|
||||
0x88381B0D, // 00D1 GETMBR R14 R13 K13
|
||||
0x88381D0A, // 00D2 GETMBR R14 R14 K10
|
||||
0x883C090B, // 00D3 GETMBR R15 R4 K11
|
||||
0x903A160F, // 00D4 SETMBR R14 K11 R15
|
||||
0x88381B0D, // 00D5 GETMBR R14 R13 K13
|
||||
0x88381D0A, // 00D6 GETMBR R14 R14 K10
|
||||
0x883C090C, // 00D7 GETMBR R15 R4 K12
|
||||
0x903A180F, // 00D8 SETMBR R14 K12 R15
|
||||
0x88381B0D, // 00D9 GETMBR R14 R13 K13
|
||||
0xB83E0200, // 00DA GETNGBL R15 K1
|
||||
0x8C3C1F21, // 00DB GETMET R15 R15 K33
|
||||
0x7C3C0200, // 00DC CALL R15 1
|
||||
0x903A1A0F, // 00DD SETMBR R14 K13 R15
|
||||
0x88381B0D, // 00DE GETMBR R14 R13 K13
|
||||
0x88381D0D, // 00DF GETMBR R14 R14 K13
|
||||
0x883C090D, // 00E0 GETMBR R15 R4 K13
|
||||
0x903A1A0F, // 00E1 SETMBR R14 K13 R15
|
||||
0x88380D08, // 00E2 GETMBR R14 R6 K8
|
||||
0x8C381D22, // 00E3 GETMET R14 R14 K34
|
||||
0x5C401A00, // 00E4 MOVE R16 R13
|
||||
0x7C380400, // 00E5 CALL R14 2
|
||||
0xB83A3000, // 00E6 GETNGBL R14 K24
|
||||
0x8C381D14, // 00E7 GETMET R14 R14 K20
|
||||
0x8C400719, // 00E8 GETMET R16 R3 K25
|
||||
0x58480027, // 00E9 LDCONST R18 K39
|
||||
0x884C0312, // 00EA GETMBR R19 R1 K18
|
||||
0x884C271B, // 00EB GETMBR R19 R19 K27
|
||||
0x8850090D, // 00EC GETMBR R20 R4 K13
|
||||
0x88540324, // 00ED GETMBR R21 R1 K36
|
||||
0x7C400A00, // 00EE CALL R16 5
|
||||
0x5844001C, // 00EF LDCONST R17 K28
|
||||
0x7C380600, // 00F0 CALL R14 3
|
||||
0x70020009, // 00F1 JMP #00FC
|
||||
0xB83A3000, // 00F2 GETNGBL R14 K24
|
||||
0x8C381D14, // 00F3 GETMET R14 R14 K20
|
||||
0x8C400719, // 00F4 GETMET R16 R3 K25
|
||||
0x58480028, // 00F5 LDCONST R18 K40
|
||||
0x884C0312, // 00F6 GETMBR R19 R1 K18
|
||||
0x884C271B, // 00F7 GETMBR R19 R19 K27
|
||||
0x88500324, // 00F8 GETMBR R20 R1 K36
|
||||
0x7C400800, // 00F9 CALL R16 4
|
||||
0x5844001C, // 00FA LDCONST R17 K28
|
||||
0x7C380600, // 00FB CALL R14 3
|
||||
0x7001FF1C, // 00FC JMP #001A
|
||||
0x581C0029, // 00FD LDCONST R7 K41
|
||||
0xAC1C0200, // 00FE CATCH R7 1 0
|
||||
0xB0080000, // 00FF RAISE 2 R0 R0
|
||||
0x601C000C, // 0100 GETGBL R7 G12
|
||||
0x88200D08, // 0101 GETMBR R8 R6 K8
|
||||
0x7C1C0200, // 0102 CALL R7 1
|
||||
0x241C0F2A, // 0103 GT R7 R7 K42
|
||||
0x781E0004, // 0104 JMPF R7 #010A
|
||||
0x8C1C012B, // 0105 GETMET R7 R0 K43
|
||||
0x5C240200, // 0106 MOVE R9 R1
|
||||
0x5C280C00, // 0107 MOVE R10 R6
|
||||
0x7C1C0600, // 0108 CALL R7 3
|
||||
0x70020001, // 0109 JMP #010C
|
||||
0x501C0000, // 010A LDBOOL R7 0 0
|
||||
0x80040E00, // 010B RET 1 R7
|
||||
0x501C0200, // 010C LDBOOL R7 1 0
|
||||
0x80040E00, // 010D RET 1 R7
|
||||
0x80000000, // 010E RET 0
|
||||
})
|
||||
)
|
||||
);
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user