From ad54726b17fabd11f46bc6121e664eac38960a23 Mon Sep 17 00:00:00 2001
From: dayu <506228475@qq.com>
Date: Wed, 21 Oct 2026 20:56:54 +0800
Subject: [PATCH] Fix FxPlug CI orientation and preserve incompatible legacy
tracks; prepare tested 1.0.6 Release
---
README.md | 6 +
Templates/大鱼人像美化/README.md | 4 +-
Templates/大鱼人像美化/VALIDATION.json | 23 +-
Templates/大鱼人像美化/大鱼人像美化.moef | 4 +-
beatygril/beatygril/Plugin/Info.plist | 8 +-
beatygril/beatygril/Plugin/beatygrilPlugIn.m | 39 +-
.../beatygril/Wrapper Application/Info.plist | 4 +-
docs/analysis/chin-report.json | 22 +-
docs/analysis/rea-image-orientation.json | 11758 ++++++++++++++++
docs/analysis/下巴与坐标分析.md | 15 +
docs/analysis/脸型变形与转脸分析.md | 2 +
.../v1.0.6/anatomical-summary.json | 15 +
docs/verification/v1.0.6/core-tests.txt | 5 +
docs/verification/v1.0.6/host-tests.txt | 21 +
docs/verification/v1.0.6/osc-tests.txt | 21 +
.../v1.0.6/slim-chin-real-video-asan.txt | 2 +
docs/验证记录.md | 8 +
tests/host_adapter_tests.m | 213 +-
18 files changed, 12145 insertions(+), 25 deletions(-)
create mode 100644 docs/analysis/rea-image-orientation.json
create mode 100644 docs/verification/v1.0.6/anatomical-summary.json
create mode 100644 docs/verification/v1.0.6/core-tests.txt
create mode 100644 docs/verification/v1.0.6/host-tests.txt
create mode 100644 docs/verification/v1.0.6/osc-tests.txt
create mode 100644 docs/verification/v1.0.6/slim-chin-real-video-asan.txt
diff --git a/README.md b/README.md
index d028223..c4f891e 100644
--- a/README.md
+++ b/README.md
@@ -28,3 +28,9 @@ xcodebuild -project beatygril/beatygril.xcodeproj -scheme 'Wrapper Application'
瘦脸现固定使用Vision revision 3的76点配置,以17组轮廓到鼻部/瞳孔锚点的局部逆向采样替代脸框水平挤压,包含原版尺寸增益与滑块强度映射。完整点阵贯通实时稳定与离线存储;旧分析记录没有完整76点时跳过瘦脸,重新分析可补齐。其他脸型项仍使用原有近似实现,不能将本次对齐扩张为全部脸型逐像素等价。
离屏验证新增224项:含48组脸部投影/尺寸/歪头与独立17-pin数值场对照、数据恢复和缺点保护;完整回归604项通过。Motion/FCP界面由用户自测。可运行 `python3 scripts/deliver.py --wait-for-hosts --user-tests`,签名公证后只读等待宿主自然退出,安装验证与清理无需操作宿主界面。
+
+## 1.0.6 下巴与图像坐标修复
+
+下巴改为76点中68→38、67→37、66→36的三组局部位移,正值上收、负值延伸,保留原版正负不同系数及尺寸增益。Core Image/IOSurface输入输出移除按TOP_LEFT额外翻转,和原版图像链对齐。修复依据与离屏复现见[下巴与坐标分析](docs/analysis/下巴与坐标分析.md)。七类其余脸型项仍是近似实现。
+
+旧版分析记录无法区分是否包含额外翻转,新版保留原字符串但暂用实时跟随;重新分析即可写入新坐标标记并恢复离线跟踪。最终Motion/FCP画面由用户自行测试。
diff --git a/Templates/大鱼人像美化/README.md b/Templates/大鱼人像美化/README.md
index 46cf59f..ea3c608 100644
--- a/Templates/大鱼人像美化/README.md
+++ b/Templates/大鱼人像美化/README.md
@@ -1,6 +1,6 @@
# 大鱼人像美化 FCP 效果模板
-版本:1.0.5。滤镜 UUID:`FB14B0E6-59B2-4836-916F-CD0C559E9241`。模板必须与已安装的大鱼人像美化 FxPlug APP 配套使用。
+版本:1.0.6。滤镜 UUID:`FB14B0E6-59B2-4836-916F-CD0C559E9241`。模板必须与已安装的大鱼人像美化 FxPlug APP 配套使用。
## 默认数值
@@ -33,3 +33,5 @@ Apple项目、群组、Effect Source和滤镜节点骨架来源于用户自有
本次已经静态核验Source Media→clip→相对文件链存在、文件字节一致、48项发布仍解析、隐藏数据未发布和保存选择状态;修复后已在FCP独立验收项目新增实例,确认输入替换、实际人像和提亮画面正常;Mix=0逐字节直通由宿主适配器IOSurface回归测试覆盖,未将其混称为FCP截图逐像素核验。
1.0.5将瘦脸改为76点驱动的17组局部位移,供用户在Motion/FCP自测最大瘦脸与转脸。旧跟踪记录若没有全点阵,需重新分析后才有瘦脸,或关闭“使用跟踪数据”采用当前帧自动检测。
+
+1.0.6移除Core Image/IOSurface链按宿主原点重复翻转,修正下巴三组局部位移及正负方向。旧版未标记坐标空间的分析记录保留但不再重放,自动回退实时跟随;需要离线记录时重新分析当前目标。
diff --git a/Templates/大鱼人像美化/VALIDATION.json b/Templates/大鱼人像美化/VALIDATION.json
index d8c73b9..34d2a1c 100644
--- a/Templates/大鱼人像美化/VALIDATION.json
+++ b/Templates/大鱼人像美化/VALIDATION.json
@@ -1,6 +1,6 @@
{
- "version": "1.0.5",
- "sha256": "ba08de6916cd837b3733aa0c6fcb78f2e8224431d25e1310089ae67d18445f2d",
+ "version": "1.0.6",
+ "sha256": "30ca8edf36801264c5de2c753c40b720aba8052633620713a12401098fcd2409",
"filterUUID": "FB14B0E6-59B2-4836-916F-CD0C559E9241",
"publishedFunctionalControls": 46,
"informationalControls": 2,
@@ -27,8 +27,9 @@
"date": "2026-10-21",
"FCP": "Restored input-chain template shows supplied real video; effect parameters and forward analysis responded in independent QA project.",
"Motion": "1.0.4 installed formal app loaded the real-video QA project and rendered brightness/geometry with a primary box at different playhead positions; offline tracking disabled.",
- "scope": "1.0.5 native visual QA is reserved for user self-testing; no Motion/FCP UI operations in the slimming repair. Historical input/brightness validation remains scoped to prior releases.",
- "version105": "Formal 1.0.5 (7) signed/notarized/stapled/installed and PluginKit formal path verified. User closed hosts before replacement; no Motion/FCP UI operated. Native visual testing pending user."
+ "scope": "1.0.6 coordinate/chin repair native visual QA is reserved for user self-testing; no Motion/FCP UI operations. Historical host tests remain scoped to their versions.",
+ "version105": "Formal 1.0.5 (7) signed/notarized/stapled/installed and PluginKit formal path verified. User closed hosts before replacement; no Motion/FCP UI operated. Native visual testing pending user.",
+ "version106": "Source repair under validation, not yet installed."
},
"slimValidation": {
"offlineFullChecks": 604,
@@ -36,5 +37,19 @@
"extraRealVideoASanChecks": 264,
"sampledVideoFrames": 11,
"maxUVOracleError": 1.09828022e-05
+ },
+ "coordinateChinValidation": {
+ "offlineFullChecks": 904,
+ "thinChinChecks": 394,
+ "hostAdapterChecksASan": 247,
+ "oscChecksASan": 98,
+ "extraRealVideoASanChecks": 494,
+ "sampledVideoFrames": 11,
+ "independentAnatomicalChecks": 12,
+ "originCombinations": 16,
+ "allOriginTagsPixelIdentical": true,
+ "maxByteErrorVsIndependentCIReference": 2,
+ "maxUVOracleError": 1.09828022e-05,
+ "nativeVisualQA": "pending user"
}
}
diff --git a/Templates/大鱼人像美化/大鱼人像美化.moef b/Templates/大鱼人像美化/大鱼人像美化.moef
index f68569a..9811823 100644
--- a/Templates/大鱼人像美化/大鱼人像美化.moef
+++ b/Templates/大鱼人像美化/大鱼人像美化.moef
@@ -46,7 +46,7 @@
1
- 大鱼人像美化 1.0.5:人像磨皮、肤色、脸型、五官保护和三目标人脸跟踪。模板中频磨皮默认为50%。
+ 大鱼人像美化 1.0.6:人像磨皮、肤色、脸型、五官保护和三目标人脸跟踪。模板中频磨皮默认为50%。
1920
@@ -298,7 +298,7 @@
-
+
8589934608
diff --git a/beatygril/beatygril/Plugin/Info.plist b/beatygril/beatygril/Plugin/Info.plist
index 95542fa..9baedf9 100644
--- a/beatygril/beatygril/Plugin/Info.plist
+++ b/beatygril/beatygril/Plugin/Info.plist
@@ -17,9 +17,9 @@
CFBundlePackageType
XPC!
CFBundleShortVersionString
- 1.0.5
+ 1.0.6
CFBundleVersion
- 7
+ 8
NSHumanReadableCopyright
PlugInKit
@@ -72,7 +72,7 @@
uuid
FB14B0E6-59B2-4836-916F-CD0C559E9241
version
- 1.0.5
+ 1.0.6
className
@@ -84,7 +84,7 @@
uuid
E0E432C8-3D71-4ABA-B006-E7F519E06C87
version
- 1.0.5
+ 1.0.6
protocolNames
FxOnScreenControl
diff --git a/beatygril/beatygril/Plugin/beatygrilPlugIn.m b/beatygril/beatygril/Plugin/beatygrilPlugIn.m
index 3f14895..c3255e6 100644
--- a/beatygril/beatygril/Plugin/beatygrilPlugIn.m
+++ b/beatygril/beatygril/Plugin/beatygrilPlugIn.m
@@ -52,15 +52,29 @@ static BOOL PGFail(NSError **error, NSString *message) {
userInfo:@{NSLocalizedDescriptionKey:message}];
return NO;
}
+static NSString * const PGHostCoordinateSpace = @"iosurface-ci-y-up-v1";
+static BOOL PGCompatibleHostTrack(NSData *data) {
+ if (!data.length || data.length > 128*1024*1024) return NO;
+ NSDictionary *archive = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListImmutable format:nil error:nil];
+ return [archive isKindOfClass:NSDictionary.class] && [archive[@"hostCoordinateSpace"] isEqual:PGHostCoordinateSpace];
+}
+static NSData *PGMarkHostTrack(NSData *data) {
+ if (!data) return nil;
+ NSMutableDictionary *archive = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListMutableContainers format:nil error:nil];
+ if (![archive isKindOfClass:NSMutableDictionary.class]) return nil;
+ archive[@"hostCoordinateSpace"] = PGHostCoordinateSpace;
+ return [NSPropertyListSerialization dataWithPropertyList:archive format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
+}
static CIImage *PGImageFromTile(FxImageTile *tile) {
if (!tile.ioSurface) return nil;
// The host already supplies video-gamma RGB. Keep those numeric values in
// every stage; implicit Core Image linearization changes mask thresholds.
NSDictionary *options = @{kCIImageColorSpace:NSNull.null};
CIImage *image = [CIImage imageWithIOSurface:(__bridge IOSurfaceRef)tile.ioSurface options:options];
- if (tile.imageOrigin == kFxImageOrigin_TOP_LEFT) {
- image = [image imageByApplyingTransform:CGAffineTransformMake(1,0,0,-1,0,image.extent.size.height)];
- }
+ // Match the reference's CI/IOSurface path. imageOrigin describes the host's
+ // coordinate axes; it is not an instruction to reverse IOSurface scanlines.
+ // An extra input/output flip can hide in passthrough while inverting faces
+ // inside Vision and the analytic shape/mask stages.
FxRect b = tile.tilePixelBounds;
return [image imageByApplyingTransform:CGAffineTransformMakeTranslation(b.left,b.bottom)];
}
@@ -76,6 +90,7 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
@property BOOL analyzing;
@property BOOL analysisForward;
@property (strong) NSArray *loadedTracks;
+@property uint32_t compatibleTrackMask;
@property BOOL reportedRender;
@end
@@ -239,13 +254,22 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
@synchronized(_faceProcessor) {
NSArray *tracks=plist[@"tracks"];
if(![tracks isKindOfClass:NSArray.class]||tracks.count!=3) return PGFail(error,@"跟踪状态无效。");
+ for(id track in tracks) if(![track isKindOfClass:NSString.class]) return PGFail(error,@"跟踪记录无效。");
if(![_loadedTracks isEqualToArray:tracks]) {
+ _compatibleTrackMask=0;
for(NSUInteger i=0;i<3;i++) {
- if(![tracks[i] isKindOfClass:NSString.class]) return PGFail(error,@"跟踪记录无效。");
- [_faceProcessor setTrackingData:[[NSData alloc] initWithBase64EncodedString:tracks[i] options:0] forTarget:i];
+ NSData *data=[[NSData alloc] initWithBase64EncodedString:tracks[i] options:0];
+ BOOL compatible=PGCompatibleHostTrack(data);
+ if(compatible) _compatibleTrackMask |= 1u< api=[_apiManager apiForProtocol:@protocol(FxParameterSettingAPI_v5)];
NSData *data=nil;
@synchronized(_analysisFaceProcessor) {data=[_analysisFaceProcessor trackingDataForTarget:_analysisSettings.targetIndex];}
+ data=PGMarkHostTrack(data);
@synchronized(_faceProcessor) {_loadedTracks=nil;}
if(data.length>64*1024*1024) {
_analyzing=NO;
diff --git a/beatygril/beatygril/Wrapper Application/Info.plist b/beatygril/beatygril/Wrapper Application/Info.plist
index a1fe6cd..7e30af8 100644
--- a/beatygril/beatygril/Wrapper Application/Info.plist
+++ b/beatygril/beatygril/Wrapper Application/Info.plist
@@ -17,9 +17,9 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.0.5
+ 1.0.6
CFBundleVersion
- 7
+ 8
LSMinimumSystemVersion
$(MACOSX_DEPLOYMENT_TARGET)
NSHumanReadableCopyright
diff --git a/docs/analysis/chin-report.json b/docs/analysis/chin-report.json
index 254a262..4521199 100644
--- a/docs/analysis/chin-report.json
+++ b/docs/analysis/chin-report.json
@@ -39,12 +39,28 @@
"face": 116,
"thin_chin": 394,
"failures": 0,
- "maximum_uv_oracle_error": 1.09828022e-05
+ "maximum_uv_oracle_error": 1.09828022e-05,
+ "realVideoASanChecks": 494,
+ "realVideoFrames": 11,
+ "independentAnatomicalChecks": 12,
+ "fullChecks": 904,
+ "hostAdapterASanChecks": 247,
+ "oscASanChecks": 98,
+ "allOriginTagsPixelIdentical": true,
+ "maxByteErrorVsIndependentCIReference": 2
},
"limitations": [
"Seven other shape controls remain approximations.",
"Combined analytic controls and multi-face resampling order is not fully reference equivalent.",
- "FxPlug adapter imageOrigin handling is under separate investigation.",
"Motion/FCP final visual validation is reserved for user."
- ]
+ ],
+ "adapterCorrection": {
+ "change": "remove imageOrigin-based input/output flips to match reference CI/IOSurface path",
+ "legacyTrackPolicy": "preserve unmarked strings but use realtime follow; reanalysis writes hostCoordinateSpace=iosurface-ci-y-up-v1",
+ "referenceOutputEvidence": [
+ "ev_88a71ec62fade296495f1e3f5428cdb15ad4cda43866e09fb040fa3a4bdb0440",
+ "ev_110d76f7958decb0c56b7daafe292d60a8bc56cd035b40a997f61395cb91ebfe"
+ ],
+ "nativeBufferCaptured": false
+ }
}
diff --git a/docs/analysis/rea-image-orientation.json b/docs/analysis/rea-image-orientation.json
new file mode 100644
index 0000000..ba97743
--- /dev/null
+++ b/docs/analysis/rea-image-orientation.json
@@ -0,0 +1,11758 @@
+{
+ "schema": "paintfcp-read-only-image-orientation-evidence-v1",
+ "artifact": {
+ "path": "/Applications/MSE18V2.app",
+ "analyzed_arm64_sha256": "f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"
+ },
+ "scope": "Static shipped-artifact output-helper analysis. No application execution, host capture, private frame, source media, face observation or live face coordinates are included.",
+ "observations": [
+ {
+ "claim": "The CIImage input is constructed from IOSurface or MTLTexture with a one-entry kCIImageColorSpace options dictionary. The provided render body applies only extent scale and translation, with no orientation/flip transform.",
+ "source": "saved REA pseudocode /tmp/paintfcp-original-render.c",
+ "source_lines": [
+ [
+ 358,
+ 381
+ ],
+ [
+ 418,
+ 455
+ ]
+ ],
+ "source_sha256": "b531c5f870ce90c0106c75c5e41db8938b5619bb96486fac51c18ba9cc94ab47"
+ },
+ {
+ "claim": "0x10002911c forwards the unchanged CIImage and CGRect to CIContext render:toIOSurface:bounds:colorSpace: after nil/empty checks. It does not receive an FxImageTile or imageOrigin and makes no additional image transform.",
+ "evidence_id": "ev_88a71ec62fade296495f1e3f5428cdb15ad4cda43866e09fb040fa3a4bdb0440",
+ "call_address": "0x100029188",
+ "body_bytes": 140
+ },
+ {
+ "claim": "0x1000291b4 renders BGRA8, RGBAh or RGBAf to a temporary bitmap, then copies rows forward to IOSurface. Both source and destination pointers increment positively; there is no reversed-row copy.",
+ "evidence_id": "ev_110d76f7958decb0c56b7daafe292d60a8bc56cd035b40a997f61395cb91ebfe",
+ "bitmap_render_address": "0x1000292e4",
+ "row_copy_address": "0x10002933c",
+ "source_increment_address": "0x100029340",
+ "destination_increment_address": "0x100029344",
+ "body_bytes": 480
+ }
+ ],
+ "sdk_and_official_samples": [
+ {
+ "path": "/Library/Developer/SDKs/FxPlug.sdk/Library/Frameworks/FxPlug.framework/Headers/FxTypes.h",
+ "lines": [
+ 519,
+ 533
+ ],
+ "observation": "FxImageOrigin describes coordinate-axis handedness/direction, Motion bottom-left and FCP top-left. This documentation does not establish IOSurface physical row order."
+ },
+ {
+ "path": "/Library/Developer/SDKs/FxPlug.sdk/Library/Frameworks/FxPlug.framework/Headers/FxImageTile.h",
+ "lines": [
+ 19,
+ 54
+ ],
+ "observation": "ioSurface carries image data; imageOrigin is documented as tile origin. No physical row-reversal rule is stated."
+ },
+ {
+ "path": "/Library/Developer/Xcode/Templates/FxPlug/FxPlug 4.xctemplate/Plugin/PlugIn.m",
+ "lines": [
+ 248,
+ 266
+ ],
+ "observation": "Apple FxPlug4 template wraps Metal input/output textures and uses fixed UV vertices, without an imageOrigin branch."
+ },
+ {
+ "path": "/Volumes/DayuMedia 4TB/FCParticular/Examples/FxBrightnessAnalysis/FxBrightnessAnalysis/PlugIn/FxBrightnessAnalysis.m",
+ "lines": [
+ 688,
+ 699
+ ],
+ "observation": "Apple example directly creates CIImage from frame.ioSurface without an origin flip. Its area-average analysis is orientation-invariant, so the example alone cannot establish anatomical direction."
+ }
+ ],
+ "conclusions": [
+ "The original CI-to-IOSurface direct and bitmap fallback paths contain no additional origin-dependent flip.",
+ "Applying FxImageOrigin-based input/output flips is not supported by these original CI paths.",
+ "Native host physical storage was not captured. Static facts and controlled IOSurface tests must remain distinct from native Motion/FCP observation."
+ ],
+ "limitations": [
+ "Ghidra pseudocode is recovered non-source, not runtime behavior.",
+ "This focused check does not assert equivalence of the separate original Metal fragment-shader UV pipeline."
+ ],
+ "native_dossiers": [
+ {
+ "evidence_id": "ev_88a71ec62fade296495f1e3f5428cdb15ad4cda43866e09fb040fa3a4bdb0440",
+ "subject": {
+ "name": "MSE18V2-arm64",
+ "digest": {
+ "sha256": "f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"
+ },
+ "format": "mach-o",
+ "architecture": "arm64",
+ "local_path": "/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64"
+ },
+ "provider": {
+ "id": "ghidra",
+ "name": "Ghidra",
+ "version": "12.1.4"
+ },
+ "analysis_profile": {
+ "provider": {
+ "id": "ghidra",
+ "name": "Ghidra",
+ "version": "12.1.4"
+ },
+ "parameters": {
+ "target_kind": "executable",
+ "target_format": "mach-o",
+ "architecture": "arm64",
+ "available_architectures": [
+ "arm64"
+ ],
+ "import_mode": "ephemeral-source-immutable",
+ "annotation_policy": "atomic-function-entry-metadata-v1",
+ "load_image_observations": "source-mappings-entry-context-v2",
+ "function_body_evidence": "complete-inclusive-ranges-v1",
+ "function_references": "complete-body-and-entry-reference-manager-v2",
+ "string_inventory_evidence": "defined-data-coverage-v1",
+ "location_resolution": "explicit-address-exact-entry-symbol-first-v3",
+ "instruction_flow_evidence": "decoded-return-pcode-v1",
+ "function_boundary_observations": "ghidra-terminal-call-limitations-v1",
+ "no_return_repair": "returning-imports-decoded-return-v2",
+ "process_launch": "inspected-jvm-launch-support-v1",
+ "jump_table_evidence": "typed-case-default-blocks-v1",
+ "decompiler_jump_loads": true,
+ "loader": "auto-from-header",
+ "language_id": "auto-from-header",
+ "compiler_spec_id": "auto-default",
+ "analyzer_preset": "ghidra-default"
+ },
+ "digest": "20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c"
+ },
+ "predicate_type": "rea.analysis",
+ "operation": "analyze_function",
+ "parameters": {
+ "procedure": "0x10002911c"
+ },
+ "normalized_result": {
+ "procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ },
+ "signature": "undefined FUN_10002911c()",
+ "locals": [
+ {
+ "description": "undefined8 local_10 @ Stack[-0x10]:8",
+ "provenance": "ghidra-function-database"
+ },
+ {
+ "description": "undefined8 local_20 @ Stack[-0x20]:8",
+ "provenance": "ghidra-function-database"
+ },
+ {
+ "description": "undefined8 local_30 @ Stack[-0x30]:8",
+ "provenance": "ghidra-function-database"
+ },
+ {
+ "description": "undefined8 local_40 @ Stack[-0x40]:8",
+ "provenance": "ghidra-function-database"
+ },
+ {
+ "description": "undefined8 local_50 @ Stack[-0x50]:8",
+ "provenance": "ghidra-function-database"
+ }
+ ]
+ },
+ "pseudocode": "\nbool FUN_10002911c(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n ulong param_5,ID param_6,undefined8 param_7,undefined8 param_8)\n\n{\n bool bVar1;\n ulong uVar2;\n \n bVar1 = false;\n if (param_5 != 0) {\n uVar2 = param_5;\n _CGRectIsEmpty();\n bVar1 = (uVar2 & 1) == 0;\n if (bVar1) {\n objc_stub::render_toIOSurface_bounds_colorSpace_\n (param_6,param_1,param_2,param_3,param_4,param_5,param_7,param_8);\n }\n }\n return bVar1;\n}\n\n",
+ "assembly": [
+ "0x10002911c: cbz x0, 0x1000291a4",
+ "0x100029120: stp d11, d10, [sp, #-0x50]!",
+ "0x100029124: stp d9, d8, [sp, #0x10]",
+ "0x100029128: stp x22, x21, [sp, #0x20]",
+ "0x10002912c: stp x20, x19, [sp, #0x30]",
+ "0x100029130: stp x29, x30, [sp, #0x40]",
+ "0x100029134: add x29, sp, #0x40",
+ "0x100029138: mov x19, x3",
+ "0x10002913c: fmov d8, d3",
+ "0x100029140: fmov d9, d2",
+ "0x100029144: fmov d10, d1",
+ "0x100029148: fmov d11, d0",
+ "0x10002914c: mov x20, x2",
+ "0x100029150: mov x22, x1",
+ "0x100029154: mov x21, x0",
+ "0x100029158: bl 0x100055500",
+ "0x10002915c: tbz w0, #0x0, 0x100029168",
+ "0x100029160: mov w0, #0x0",
+ "0x100029164: b 0x100029190",
+ "0x100029168: mov x0, x22",
+ "0x10002916c: mov x2, x21",
+ "0x100029170: mov x3, x20",
+ "0x100029174: fmov d0, d11",
+ "0x100029178: fmov d1, d10",
+ "0x10002917c: fmov d2, d9",
+ "0x100029180: fmov d3, d8",
+ "0x100029184: mov x4, x19",
+ "0x100029188: bl 0x10005a920",
+ "0x10002918c: mov w0, #0x1",
+ "0x100029190: ldp x29, x30, [sp, #0x40]",
+ "0x100029194: ldp x20, x19, [sp, #0x30]",
+ "0x100029198: ldp x22, x21, [sp, #0x20]",
+ "0x10002919c: ldp d9, d8, [sp, #0x10]",
+ "0x1000291a0: ldp d11, d10, [sp], #0x50",
+ "0x1000291a4: ret"
+ ],
+ "comments": [
+ {
+ "address": "0x100029188",
+ "kind": "inline",
+ "text": "[param_6 render:param_2 toIOSurface:param_3 bounds:param_4 colorSpace:param_5]"
+ }
+ ],
+ "callers": [
+ {
+ "address": "0x10001cba4",
+ "name": "MSSuperSkinSmoothingPlugIn::renderDestinationImage:sourceImages:pluginState:atTime:error:",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10001cba4",
+ "end": "0x100021c17"
+ }
+ ],
+ "total_bytes": 20596,
+ "span_bytes": 20596,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ }
+ ],
+ "callees": [
+ {
+ "address": "0x100055500",
+ "name": "_CGRectIsEmpty",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xc4",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x100055500",
+ "end": "0x10005550b"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x10005a920",
+ "name": "objc_stub::render:toIOSurface:bounds:colorSpace:",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10005a920",
+ "end": "0x10005a933"
+ }
+ ],
+ "total_bytes": 20,
+ "span_bytes": 20,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ }
+ ],
+ "incoming_references": [
+ {
+ "source_address": "0x100021244",
+ "target_address": "0x10002911c",
+ "source_procedure": {
+ "address": "0x10001cba4",
+ "name": "MSSuperSkinSmoothingPlugIn::renderDestinationImage:sourceImages:pluginState:atTime:error:",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10001cba4",
+ "end": "0x100021c17"
+ }
+ ],
+ "total_bytes": 20596,
+ "span_bytes": 20596,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100021328",
+ "target_address": "0x10002911c",
+ "source_procedure": {
+ "address": "0x10001cba4",
+ "name": "MSSuperSkinSmoothingPlugIn::renderDestinationImage:sourceImages:pluginState:atTime:error:",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10001cba4",
+ "end": "0x100021c17"
+ }
+ ],
+ "total_bytes": 20596,
+ "span_bytes": 20596,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000922f0",
+ "target_address": "0x10002911c",
+ "source_procedure": null,
+ "target_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "DATA",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ }
+ ],
+ "outgoing_references": [
+ {
+ "source_address": "0x10002911c",
+ "target_address": "0x1000291a4",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 1,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029120",
+ "target_address": "stack:0xffffffffffffffb0",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029124",
+ "target_address": "stack:0xffffffffffffffc0",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029128",
+ "target_address": "stack:0xffffffffffffffd0",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002912c",
+ "target_address": "stack:0xffffffffffffffe0",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029130",
+ "target_address": "stack:0xfffffffffffffff0",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029158",
+ "target_address": "0x100055500",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x100055500",
+ "name": "_CGRectIsEmpty",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xc4",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x100055500",
+ "end": "0x10005550b"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002915c",
+ "target_address": "0x100029168",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029164",
+ "target_address": "0x100029190",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029188",
+ "target_address": "0x10005a920",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x10005a920",
+ "name": "objc_stub::render:toIOSurface:bounds:colorSpace:",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10005a920",
+ "end": "0x10005a933"
+ }
+ ],
+ "total_bytes": 20,
+ "span_bytes": 20,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029190",
+ "target_address": "stack:0xfffffffffffffff0",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "DATA",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029194",
+ "target_address": "stack:0xffffffffffffffe0",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029198",
+ "target_address": "stack:0xffffffffffffffd0",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002919c",
+ "target_address": "stack:0xffffffffffffffc0",
+ "source_procedure": {
+ "address": "0x10002911c",
+ "name": "FUN_10002911c",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10002911c",
+ "end": "0x1000291a7"
+ }
+ ],
+ "total_bytes": 140,
+ "span_bytes": 140,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ }
+ ],
+ "referenced_strings": [],
+ "referenced_names": [
+ {
+ "address": "0x100029168",
+ "value": "LAB_100029168",
+ "source_address": "0x10002915c"
+ },
+ {
+ "address": "0x100029190",
+ "value": "LAB_100029190",
+ "source_address": "0x100029164"
+ },
+ {
+ "address": "0x1000291a4",
+ "value": "LAB_1000291a4",
+ "source_address": "0x10002911c"
+ },
+ {
+ "address": "0x100055500",
+ "value": "_CGRectIsEmpty",
+ "source_address": "0x100029158"
+ },
+ {
+ "address": "0x10005a920",
+ "value": "objc_stub::render:toIOSurface:bounds:colorSpace:",
+ "source_address": "0x100029188"
+ }
+ ],
+ "basic_blocks": [
+ {
+ "start": "0x10002911c",
+ "end": "0x100029120",
+ "successors": [
+ "0x100029120",
+ "0x1000291a4"
+ ]
+ },
+ {
+ "start": "0x100029120",
+ "end": "0x100029160",
+ "successors": [
+ "0x100029160",
+ "0x100029168"
+ ]
+ },
+ {
+ "start": "0x100029160",
+ "end": "0x100029168",
+ "successors": [
+ "0x100029190"
+ ]
+ },
+ {
+ "start": "0x100029168",
+ "end": "0x100029190",
+ "successors": [
+ "0x100029190"
+ ]
+ },
+ {
+ "start": "0x100029190",
+ "end": "0x1000291a4",
+ "successors": [
+ "0x1000291a4"
+ ]
+ },
+ {
+ "start": "0x1000291a4",
+ "end": "0x1000291a8",
+ "successors": []
+ }
+ ],
+ "native_api": {
+ "available": true,
+ "provenance": "ghidra-high-function",
+ "signature_source": "default",
+ "calling_convention": "__swiftcall",
+ "return_type": {
+ "ordinal": null,
+ "name": null,
+ "data_type": "bool",
+ "size_bytes": 1,
+ "storage": "w0:1",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type bool."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage"
+ ],
+ "role": "return"
+ },
+ "parameters": [
+ {
+ "ordinal": 0,
+ "name": "param_1",
+ "data_type": "undefined8",
+ "size_bytes": 8,
+ "storage": "d0:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type undefined8."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 1,
+ "name": "param_2",
+ "data_type": "undefined8",
+ "size_bytes": 8,
+ "storage": "d1:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type undefined8."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 2,
+ "name": "param_3",
+ "data_type": "undefined8",
+ "size_bytes": 8,
+ "storage": "d2:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type undefined8."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 3,
+ "name": "param_4",
+ "data_type": "undefined8",
+ "size_bytes": 8,
+ "storage": "d3:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type undefined8."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 4,
+ "name": "param_5",
+ "data_type": "ulong",
+ "size_bytes": 8,
+ "storage": "x0:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type ulong."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 5,
+ "name": "param_6",
+ "data_type": "ID",
+ "size_bytes": 8,
+ "storage": "x1:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type ID."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 6,
+ "name": "param_7",
+ "data_type": "undefined8",
+ "size_bytes": 8,
+ "storage": "x2:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type undefined8."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 7,
+ "name": "param_8",
+ "data_type": "undefined8",
+ "size_bytes": 8,
+ "storage": "x3:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type undefined8."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ }
+ ],
+ "jump_tables": [],
+ "pseudocode": {
+ "classification": "decompiler-generated-non-source",
+ "compilable": false
+ },
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-and-stack-variables",
+ "compiler-generated-control-flow",
+ "pointer-arithmetic",
+ "pseudocode"
+ ],
+ "limitations": [
+ "Types and calling conventions are Ghidra decompiler observations, not source declarations.",
+ "Register variables, compiler-generated blocks, and pointer arithmetic remain decompiler artifacts.",
+ "Pseudocode is neither original source nor guaranteed to compile."
+ ]
+ },
+ "native_value_flow": {
+ "available": true,
+ "provenance": "ghidra-high-pcode",
+ "operations": [
+ {
+ "id": "0x10002911c#0",
+ "address": "0x10002911c",
+ "sequence": 0,
+ "opcode": "INT_NOTEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x31700",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002911c#1",
+ "address": "0x10002911c",
+ "sequence": 1,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x1000291a4",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x31700",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x10002911c#357",
+ "address": "0x10002911c",
+ "sequence": 357,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 1,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x1000001b",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029158#56",
+ "address": "0x100029158",
+ "sequence": 56,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100055500",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029158#170",
+ "address": "0x100029158",
+ "sequence": 170,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000023",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "38"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029158#358",
+ "address": "0x100029158",
+ "sequence": 358,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000023",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002915c#59",
+ "address": "0x10002915c",
+ "sequence": 59,
+ "opcode": "INT_EQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000012",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x30d00",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002915c#61",
+ "address": "0x10002915c",
+ "sequence": 61,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029168",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x30d00",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x10002915c#312",
+ "address": "0x10002915c",
+ "sequence": 312,
+ "opcode": "INT_AND",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "1"
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000012",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029188#126",
+ "address": "0x100029188",
+ "sequence": 126,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x10005a920",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4008",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5000",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5020",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5040",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5060",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4010",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4018",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000291a4#104",
+ "address": "0x1000291a4",
+ "sequence": 104,
+ "opcode": "RETURN",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000291a4#356",
+ "address": "0x1000291a4",
+ "sequence": 356,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x1000001b",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x30d00",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x30d00",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ }
+ ],
+ "def_use": [
+ {
+ "definition": "0x10002911c#0",
+ "use": "0x10002911c#1",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029158#358",
+ "use": "0x100029158#170",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002915c#312",
+ "use": "0x10002915c#59",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002915c#59",
+ "use": "0x10002915c#61",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029158#170",
+ "use": "0x10002915c#312",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000291a4#356",
+ "use": "0x1000291a4#104",
+ "input_index": 1
+ },
+ {
+ "definition": "0x10002911c#357",
+ "use": "0x1000291a4#356",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002915c#59",
+ "use": "0x1000291a4#356",
+ "input_index": 1
+ },
+ {
+ "definition": "0x10002915c#59",
+ "use": "0x1000291a4#356",
+ "input_index": 2
+ }
+ ],
+ "effects": [
+ {
+ "operation": "0x10002911c#1",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x100029158#56",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x10002915c#61",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x100029188#126",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ }
+ ],
+ "parameters": [
+ {
+ "ordinal": 0,
+ "name": "param_1",
+ "data_type": "/undefined8"
+ },
+ {
+ "ordinal": 1,
+ "name": "param_2",
+ "data_type": "/undefined8"
+ },
+ {
+ "ordinal": 2,
+ "name": "param_3",
+ "data_type": "/undefined8"
+ },
+ {
+ "ordinal": 3,
+ "name": "param_4",
+ "data_type": "/undefined8"
+ },
+ {
+ "ordinal": 4,
+ "name": "param_5",
+ "data_type": "/ulong"
+ },
+ {
+ "ordinal": 5,
+ "name": "param_6",
+ "data_type": "/_objc2_/ID"
+ },
+ {
+ "ordinal": 6,
+ "name": "param_7",
+ "data_type": "/undefined8"
+ },
+ {
+ "ordinal": 7,
+ "name": "param_8",
+ "data_type": "/undefined8"
+ }
+ ],
+ "parameter_uses": [
+ {
+ "ordinal": 4,
+ "use": "0x10002911c#0",
+ "input_index": 0
+ },
+ {
+ "ordinal": 4,
+ "use": "0x100029158#358",
+ "input_index": 0
+ },
+ {
+ "ordinal": 5,
+ "use": "0x100029188#126",
+ "input_index": 1
+ },
+ {
+ "ordinal": 0,
+ "use": "0x100029188#126",
+ "input_index": 2
+ },
+ {
+ "ordinal": 1,
+ "use": "0x100029188#126",
+ "input_index": 3
+ },
+ {
+ "ordinal": 2,
+ "use": "0x100029188#126",
+ "input_index": 4
+ },
+ {
+ "ordinal": 3,
+ "use": "0x100029188#126",
+ "input_index": 5
+ },
+ {
+ "ordinal": 4,
+ "use": "0x100029188#126",
+ "input_index": 6
+ },
+ {
+ "ordinal": 6,
+ "use": "0x100029188#126",
+ "input_index": 7
+ },
+ {
+ "ordinal": 7,
+ "use": "0x100029188#126",
+ "input_index": 8
+ }
+ ],
+ "truncated": false,
+ "omitted_operations_lower_bound": 0,
+ "known_omitted_inputs": 0,
+ "known_omitted_edges": 0,
+ "limitations": [
+ "High p-code is decompiler-derived, not original source or runtime behavior. is_dead preserves the Java AST flag; decoded block members can retain that flag, so block_membership separately reports actual syntax-tree membership.",
+ "Def-use links do not cross function boundaries and may omit memory aliasing, call side effects, or unresolved indirect flow.",
+ "Memory read/write effects include stack and temporary memory operations; they do not identify persistent state or business meaning.",
+ "Operation, input, and def-use limits can truncate large functions; inspect truncation, omitted lower bounds, and known omitted counts before drawing conclusions.",
+ "Known omitted-edge counts cover links omitted from retained operations; omitted operations may contain additional uncounted links."
+ ]
+ },
+ "limitations": [
+ "Unresolved computed or indirect flows without target addresses are not represented as reference edges.",
+ "Thunk and external classifications are Ghidra FunctionManager observations; they do not resolve targetless calls.",
+ "Pseudocode and assembly are Ghidra-specific representations, not original source or Hopper-equivalent text.",
+ "Synthetic Ghidra entry-point references without actionable memory sources are omitted."
+ ]
+ },
+ "confidence": "observed",
+ "authority": "shipped-artifact",
+ "environment": null,
+ "limitations": [
+ "The session serves operations only after Ghidra reports default auto-analysis complete; incomplete analysis does not expose partial results.",
+ "The imported Program and temporary project are ephemeral and deleted on close. Annotation operations edit session database metadata; original executable bytes are never written.",
+ "Cancelling an active Ghidra request terminates its ephemeral database and discards session annotations. The selected target remains open; the next provider query imports the original artifact again.",
+ "Default-space addresses use lowercase 0x-prefixed hexadecimal; other address spaces use :0x.",
+ "References cover the complete Ghidra function-body AddressSet and exact entry. Dossier incoming edges omit sources owned by that function; procedure_references also retains those internal edges.",
+ "The dossier combines Ghidra FunctionManager, Listing, ReferenceManager, BasicBlockModel, and decompiler observations; provider-specific pseudocode and assembly are not cross-provider text invariants.",
+ "Resolved reference metadata identifies computed, indirect, external, call, jump, and data edges; unresolved targetless flows remain unknown, and function classifications distinguish thunks and externals.",
+ "Synthetic Ghidra entry-point references without actionable memory sources are omitted.",
+ "The Java bridge serializes one function request per Program and lets each decompilation run until it completes or the caller cancels.",
+ "macOS sessions require a matching executable Ghidra native decompiler; REA checks for it but does not build native components or change Gatekeeper quarantine state."
+ ],
+ "locations": [],
+ "evidence_links": []
+ },
+ {
+ "evidence_id": "ev_110d76f7958decb0c56b7daafe292d60a8bc56cd035b40a997f61395cb91ebfe",
+ "subject": {
+ "name": "MSE18V2-arm64",
+ "digest": {
+ "sha256": "f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"
+ },
+ "format": "mach-o",
+ "architecture": "arm64",
+ "local_path": "/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64"
+ },
+ "provider": {
+ "id": "ghidra",
+ "name": "Ghidra",
+ "version": "12.1.4"
+ },
+ "analysis_profile": {
+ "provider": {
+ "id": "ghidra",
+ "name": "Ghidra",
+ "version": "12.1.4"
+ },
+ "parameters": {
+ "target_kind": "executable",
+ "target_format": "mach-o",
+ "architecture": "arm64",
+ "available_architectures": [
+ "arm64"
+ ],
+ "import_mode": "ephemeral-source-immutable",
+ "annotation_policy": "atomic-function-entry-metadata-v1",
+ "load_image_observations": "source-mappings-entry-context-v2",
+ "function_body_evidence": "complete-inclusive-ranges-v1",
+ "function_references": "complete-body-and-entry-reference-manager-v2",
+ "string_inventory_evidence": "defined-data-coverage-v1",
+ "location_resolution": "explicit-address-exact-entry-symbol-first-v3",
+ "instruction_flow_evidence": "decoded-return-pcode-v1",
+ "function_boundary_observations": "ghidra-terminal-call-limitations-v1",
+ "no_return_repair": "returning-imports-decoded-return-v2",
+ "process_launch": "inspected-jvm-launch-support-v1",
+ "jump_table_evidence": "typed-case-default-blocks-v1",
+ "decompiler_jump_loads": true,
+ "loader": "auto-from-header",
+ "language_id": "auto-from-header",
+ "compiler_spec_id": "auto-default",
+ "analyzer_preset": "ghidra-default"
+ },
+ "digest": "20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c"
+ },
+ "predicate_type": "rea.analysis",
+ "operation": "analyze_function",
+ "parameters": {
+ "procedure": "0x1000291b4"
+ },
+ "normalized_result": {
+ "procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ },
+ "signature": "undefined FUN_1000291b4()",
+ "locals": [
+ {
+ "description": "undefined8 local_10 @ Stack[-0x10]:8",
+ "provenance": "ghidra-function-database"
+ },
+ {
+ "description": "undefined8 local_20 @ Stack[-0x20]:8",
+ "provenance": "ghidra-function-database"
+ },
+ {
+ "description": "undefined8 local_30 @ Stack[-0x30]:8",
+ "provenance": "ghidra-function-database"
+ },
+ {
+ "description": "undefined8 local_40 @ Stack[-0x40]:8",
+ "provenance": "ghidra-function-database"
+ },
+ {
+ "description": "undefined8 local_50 @ Stack[-0x50]:8",
+ "provenance": "ghidra-function-database"
+ },
+ {
+ "description": "undefined8 local_60 @ Stack[-0x60]:8",
+ "provenance": "ghidra-function-database"
+ },
+ {
+ "description": "undefined8 local_70 @ Stack[-0x70]:8",
+ "provenance": "ghidra-function-database"
+ }
+ ]
+ },
+ "pseudocode": "\nbool FUN_1000291b4(double param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n ulong param_5,ID param_6,void *param_7,undefined8 param_8)\n\n{\n uint uVar1;\n bool bVar2;\n bool bVar3;\n int iVar4;\n ulong uVar5;\n void *pvVar6;\n void *pvVar7;\n void *pvVar8;\n void *pvVar9;\n uint *puVar10;\n long lVar11;\n void *pvVar12;\n void *pvVar13;\n double dVar14;\n double dVar15;\n \n if ((param_5 != 0) && (uVar5 = param_5, _CGRectIsEmpty(), (uVar5 & 1) == 0)) {\n pvVar13 = param_7;\n _IOSurfaceGetPixelFormat();\n iVar4 = (int)pvVar13;\n if (iVar4 == 0x42475241) {\n lVar11 = 4;\n puVar10 = (uint *)PTR__kCIFormatBGRA8_100078160;\n }\n else if (iVar4 == 0x52476641) {\n lVar11 = 0x10;\n puVar10 = (uint *)PTR__kCIFormatRGBAf_100078178;\n }\n else {\n if (iVar4 != 0x52476841) {\n return false;\n }\n lVar11 = 8;\n puVar10 = (uint *)PTR__kCIFormatRGBAh_100078180;\n }\n uVar1 = *puVar10;\n dVar14 = param_1;\n _CGRectGetWidth(param_1,param_2,param_3,param_4);\n dVar15 = param_1;\n _CGRectGetHeight(param_1,param_2,param_3,param_4);\n pvVar13 = (void *)(long)dVar15;\n if ((long)dVar14 != 0 && pvVar13 != (void *)0x0) {\n pvVar12 = (void *)((long)dVar14 * lVar11);\n pvVar6 = _calloc((long)pvVar12 * (long)pvVar13,1);\n if (pvVar6 != (void *)0x0) {\n objc_stub::render_toBitmap_rowBytes_bounds_format_colorSpace_\n (param_6,param_1,param_2,param_3,param_4,param_5,pvVar6,pvVar12,(ulong)uVar1,\n param_8);\n _IOSurfaceLock(param_7,0,0);\n pvVar7 = param_7;\n _IOSurfaceGetBaseAddress();\n pvVar8 = param_7;\n _IOSurfaceGetBytesPerRow();\n pvVar9 = param_7;\n _IOSurfaceGetHeight();\n bVar2 = pvVar13 <= pvVar9;\n bVar3 = pvVar7 != (void *)0x0;\n pvVar9 = pvVar6;\n if ((pvVar12 <= pvVar8 && bVar2) && bVar3) {\n do {\n _memcpy(pvVar7,pvVar9,(size_t)pvVar12);\n pvVar7 = (void *)((long)pvVar7 + (long)pvVar8);\n pvVar13 = (void *)((long)pvVar13 + -1);\n pvVar9 = (void *)((long)pvVar9 + (long)pvVar12);\n } while (pvVar13 != (void *)0x0);\n }\n _IOSurfaceUnlock(param_7,0,0);\n _free(pvVar6);\n return (pvVar12 <= pvVar8 && bVar2) && bVar3;\n }\n }\n }\n return false;\n}\n\n",
+ "assembly": [
+ "0x1000291b4: stp d11, d10, [sp, #-0x70]!",
+ "0x1000291b8: stp d9, d8, [sp, #0x10]",
+ "0x1000291bc: stp x26, x25, [sp, #0x20]",
+ "0x1000291c0: stp x24, x23, [sp, #0x30]",
+ "0x1000291c4: stp x22, x21, [sp, #0x40]",
+ "0x1000291c8: stp x20, x19, [sp, #0x50]",
+ "0x1000291cc: stp x29, x30, [sp, #0x60]",
+ "0x1000291d0: add x29, sp, #0x60",
+ "0x1000291d4: cbz x0, 0x100029384",
+ "0x1000291d8: mov x20, x3",
+ "0x1000291dc: fmov d8, d3",
+ "0x1000291e0: fmov d9, d2",
+ "0x1000291e4: fmov d10, d1",
+ "0x1000291e8: fmov d11, d0",
+ "0x1000291ec: mov x19, x2",
+ "0x1000291f0: mov x23, x1",
+ "0x1000291f4: mov x22, x0",
+ "0x1000291f8: bl 0x100055500",
+ "0x1000291fc: tbnz w0, #0x0, 0x100029384",
+ "0x100029200: mov x0, x19",
+ "0x100029204: bl 0x1000555b4",
+ "0x100029208: mov w8, #0x5241",
+ "0x10002920c: movk w8, #0x4247, LSL #16",
+ "0x100029210: cmp w0, w8",
+ "0x100029214: b.eq 0x100029258",
+ "0x100029218: mov w8, #0x6641",
+ "0x10002921c: movk w8, #0x5247, LSL #16",
+ "0x100029220: cmp w0, w8",
+ "0x100029224: b.eq 0x100029248",
+ "0x100029228: mov w8, #0x6841",
+ "0x10002922c: movk w8, #0x5247, LSL #16",
+ "0x100029230: cmp w0, w8",
+ "0x100029234: b.ne 0x100029384",
+ "0x100029238: adrp x8, 0x100078000",
+ "0x10002923c: ldr x8, [x8, #0x180]",
+ "0x100029240: mov w21, #0x8",
+ "0x100029244: b 0x100029264",
+ "0x100029248: adrp x8, 0x100078000",
+ "0x10002924c: ldr x8, [x8, #0x178]",
+ "0x100029250: mov w21, #0x10",
+ "0x100029254: b 0x100029264",
+ "0x100029258: adrp x8, 0x100078000",
+ "0x10002925c: ldr x8, [x8, #0x160]",
+ "0x100029260: mov w21, #0x4",
+ "0x100029264: ldr w25, [x8]",
+ "0x100029268: fmov d0, d11",
+ "0x10002926c: fmov d1, d10",
+ "0x100029270: fmov d2, d9",
+ "0x100029274: fmov d3, d8",
+ "0x100029278: bl 0x1000554dc",
+ "0x10002927c: fcvtas x24, d0",
+ "0x100029280: fmov d0, d11",
+ "0x100029284: fmov d1, d10",
+ "0x100029288: fmov d2, d9",
+ "0x10002928c: fmov d3, d8",
+ "0x100029290: bl 0x100055488",
+ "0x100029294: fcvtas x26, d0",
+ "0x100029298: cmp x24, #0x0",
+ "0x10002929c: ccmp x26, #0x0, #0x4, ne",
+ "0x1000292a0: b.eq 0x100029384",
+ "0x1000292a4: mul x24, x24, x21",
+ "0x1000292a8: mul x0, x24, x26",
+ "0x1000292ac: mov w1, #0x1",
+ "0x1000292b0: bl 0x1000557dc",
+ "0x1000292b4: cbz x0, 0x100029384",
+ "0x1000292b8: mov x21, x0",
+ "0x1000292bc: mov x0, x23",
+ "0x1000292c0: mov x2, x22",
+ "0x1000292c4: mov x3, x21",
+ "0x1000292c8: mov x4, x24",
+ "0x1000292cc: fmov d0, d11",
+ "0x1000292d0: fmov d1, d10",
+ "0x1000292d4: fmov d2, d9",
+ "0x1000292d8: fmov d3, d8",
+ "0x1000292dc: mov x5, x25",
+ "0x1000292e0: mov x6, x20",
+ "0x1000292e4: bl 0x10005a900",
+ "0x1000292e8: mov x0, x19",
+ "0x1000292ec: mov w1, #0x0",
+ "0x1000292f0: mov x2, #0x0",
+ "0x1000292f4: bl 0x1000555cc",
+ "0x1000292f8: mov x0, x19",
+ "0x1000292fc: bl 0x100055590",
+ "0x100029300: mov x22, x0",
+ "0x100029304: mov x0, x19",
+ "0x100029308: bl 0x10005559c",
+ "0x10002930c: mov x23, x0",
+ "0x100029310: mov x0, x19",
+ "0x100029314: bl 0x1000555a8",
+ "0x100029318: cmp x23, x24",
+ "0x10002931c: ccmp x0, x26, #0x0, cs",
+ "0x100029320: ccmp x22, #0x0, #0x4, cs",
+ "0x100029324: cset w20, ne",
+ "0x100029328: b.eq 0x100029350",
+ "0x10002932c: mov x25, x21",
+ "0x100029330: mov x0, x22",
+ "0x100029334: mov x1, x25",
+ "0x100029338: mov x2, x24",
+ "0x10002933c: bl 0x1000558d8",
+ "0x100029340: add x25, x25, x24",
+ "0x100029344: add x22, x22, x23",
+ "0x100029348: subs x26, x26, #0x1",
+ "0x10002934c: b.ne 0x100029330",
+ "0x100029350: mov x0, x19",
+ "0x100029354: mov w1, #0x0",
+ "0x100029358: mov x2, #0x0",
+ "0x10002935c: bl 0x1000555d8",
+ "0x100029360: mov x0, x21",
+ "0x100029364: bl 0x10005586c",
+ "0x100029368: b 0x100029388",
+ "0x100029384: mov w20, #0x0",
+ "0x100029388: mov x0, x20",
+ "0x10002938c: ldp x29, x30, [sp, #0x60]",
+ "0x100029390: ldp x20, x19, [sp, #0x50]",
+ "0x100029394: ldp x22, x21, [sp, #0x40]",
+ "0x100029398: ldp x24, x23, [sp, #0x30]",
+ "0x10002939c: ldp x26, x25, [sp, #0x20]",
+ "0x1000293a0: ldp d9, d8, [sp, #0x10]",
+ "0x1000293a4: ldp d11, d10, [sp], #0x70",
+ "0x1000293a8: ret"
+ ],
+ "comments": [
+ {
+ "address": "0x1000292e4",
+ "kind": "inline",
+ "text": "[param_6 render:param_2 toBitmap:param_3 rowBytes:param_4 bounds:param_5 format:0xcc colorSpace:0x4]"
+ }
+ ],
+ "callers": [
+ {
+ "address": "0x10001cba4",
+ "name": "MSSuperSkinSmoothingPlugIn::renderDestinationImage:sourceImages:pluginState:atTime:error:",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10001cba4",
+ "end": "0x100021c17"
+ }
+ ],
+ "total_bytes": 20596,
+ "span_bytes": 20596,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ }
+ ],
+ "callees": [
+ {
+ "address": "0x100055488",
+ "name": "_CGRectGetHeight",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xba",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x100055488",
+ "end": "0x100055493"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x1000554dc",
+ "name": "_CGRectGetWidth",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xc1",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000554dc",
+ "end": "0x1000554e7"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x100055500",
+ "name": "_CGRectIsEmpty",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xc4",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x100055500",
+ "end": "0x10005550b"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x100055590",
+ "name": "_IOSurfaceGetBaseAddress",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd0",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x100055590",
+ "end": "0x10005559b"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x10005559c",
+ "name": "_IOSurfaceGetBytesPerRow",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd1",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10005559c",
+ "end": "0x1000555a7"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x1000555a8",
+ "name": "_IOSurfaceGetHeight",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd2",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000555a8",
+ "end": "0x1000555b3"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x1000555b4",
+ "name": "_IOSurfaceGetPixelFormat",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd3",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000555b4",
+ "end": "0x1000555bf"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x1000555cc",
+ "name": "_IOSurfaceLock",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd5",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000555cc",
+ "end": "0x1000555d7"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x1000555d8",
+ "name": "_IOSurfaceUnlock",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd6",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000555d8",
+ "end": "0x1000555e3"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x1000557dc",
+ "name": "_calloc",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0x101",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000557dc",
+ "end": "0x1000557e7"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x10005586c",
+ "name": "_free",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0x10d",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10005586c",
+ "end": "0x100055877"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x1000558d8",
+ "name": "_memcpy",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0x116",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000558d8",
+ "end": "0x1000558e3"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ {
+ "address": "0x10005a900",
+ "name": "objc_stub::render:toBitmap:rowBytes:bounds:format:colorSpace:",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10005a900",
+ "end": "0x10005a913"
+ }
+ ],
+ "total_bytes": 20,
+ "span_bytes": 20,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ }
+ ],
+ "incoming_references": [
+ {
+ "source_address": "0x1000212dc",
+ "target_address": "0x1000291b4",
+ "source_procedure": {
+ "address": "0x10001cba4",
+ "name": "MSSuperSkinSmoothingPlugIn::renderDestinationImage:sourceImages:pluginState:atTime:error:",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10001cba4",
+ "end": "0x100021c17"
+ }
+ ],
+ "total_bytes": 20596,
+ "span_bytes": 20596,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002135c",
+ "target_address": "0x1000291b4",
+ "source_procedure": {
+ "address": "0x10001cba4",
+ "name": "MSSuperSkinSmoothingPlugIn::renderDestinationImage:sourceImages:pluginState:atTime:error:",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10001cba4",
+ "end": "0x100021c17"
+ }
+ ],
+ "total_bytes": 20596,
+ "span_bytes": 20596,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000922f2",
+ "target_address": "0x1000291b4",
+ "source_procedure": null,
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "DATA",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ }
+ ],
+ "outgoing_references": [
+ {
+ "source_address": "0x1000291b4",
+ "target_address": "stack:0xffffffffffffff90",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000291b8",
+ "target_address": "stack:0xffffffffffffffa0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000291bc",
+ "target_address": "stack:0xffffffffffffffb0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000291c0",
+ "target_address": "stack:0xffffffffffffffc0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000291c4",
+ "target_address": "stack:0xffffffffffffffd0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000291c8",
+ "target_address": "stack:0xffffffffffffffe0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000291cc",
+ "target_address": "stack:0xfffffffffffffff0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "WRITE",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": true,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000291d4",
+ "target_address": "0x100029384",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 1,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000291f8",
+ "target_address": "0x100055500",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x100055500",
+ "name": "_CGRectIsEmpty",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xc4",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x100055500",
+ "end": "0x10005550b"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000291fc",
+ "target_address": "0x100029384",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029204",
+ "target_address": "0x1000555b4",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000555b4",
+ "name": "_IOSurfaceGetPixelFormat",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd3",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000555b4",
+ "end": "0x1000555bf"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029214",
+ "target_address": "0x100029258",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029224",
+ "target_address": "0x100029248",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029234",
+ "target_address": "0x100029384",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002923c",
+ "target_address": "0x100078180",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 1,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029244",
+ "target_address": "0x100029264",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002924c",
+ "target_address": "0x100078178",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 1,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029254",
+ "target_address": "0x100029264",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002925c",
+ "target_address": "0x100078160",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 1,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029264",
+ "target_address": "0x1000a9400",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": false,
+ "operand_index": 1,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029264",
+ "target_address": "0x1000a9700",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": false,
+ "operand_index": 1,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029264",
+ "target_address": "0x1000a9800",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 1,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029278",
+ "target_address": "0x1000554dc",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000554dc",
+ "name": "_CGRectGetWidth",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xc1",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000554dc",
+ "end": "0x1000554e7"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029290",
+ "target_address": "0x100055488",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x100055488",
+ "name": "_CGRectGetHeight",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xba",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x100055488",
+ "end": "0x100055493"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000292a0",
+ "target_address": "0x100029384",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000292b0",
+ "target_address": "0x1000557dc",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000557dc",
+ "name": "_calloc",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0x101",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000557dc",
+ "end": "0x1000557e7"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000292b4",
+ "target_address": "0x100029384",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 1,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000292e4",
+ "target_address": "0x10005a900",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x10005a900",
+ "name": "objc_stub::render:toBitmap:rowBytes:bounds:format:colorSpace:",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10005a900",
+ "end": "0x10005a913"
+ }
+ ],
+ "total_bytes": 20,
+ "span_bytes": 20,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000292f4",
+ "target_address": "0x1000555cc",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000555cc",
+ "name": "_IOSurfaceLock",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd5",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000555cc",
+ "end": "0x1000555d7"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000292fc",
+ "target_address": "0x100055590",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x100055590",
+ "name": "_IOSurfaceGetBaseAddress",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd0",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x100055590",
+ "end": "0x10005559b"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029308",
+ "target_address": "0x10005559c",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x10005559c",
+ "name": "_IOSurfaceGetBytesPerRow",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd1",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10005559c",
+ "end": "0x1000555a7"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029314",
+ "target_address": "0x1000555a8",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000555a8",
+ "name": "_IOSurfaceGetHeight",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd2",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000555a8",
+ "end": "0x1000555b3"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029328",
+ "target_address": "0x100029350",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002933c",
+ "target_address": "0x1000558d8",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000558d8",
+ "name": "_memcpy",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0x116",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000558d8",
+ "end": "0x1000558e3"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002934c",
+ "target_address": "0x100029330",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "CONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": true,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002935c",
+ "target_address": "0x1000555d8",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000555d8",
+ "name": "_IOSurfaceUnlock",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0xd6",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000555d8",
+ "end": "0x1000555e3"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029364",
+ "target_address": "0x10005586c",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x10005586c",
+ "name": "_free",
+ "classification": {
+ "external": false,
+ "thunk": true,
+ "thunk_target": "EXTERNAL:0x10d",
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x10005586c",
+ "end": "0x100055877"
+ }
+ ],
+ "total_bytes": 12,
+ "span_bytes": 12,
+ "non_contiguous": false,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_CALL",
+ "flow": true,
+ "call": true,
+ "jump": false,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029368",
+ "target_address": "0x100029388",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "UNCONDITIONAL_JUMP",
+ "flow": true,
+ "call": false,
+ "jump": true,
+ "data": false,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002938c",
+ "target_address": "stack:0xfffffffffffffff0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "DATA",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": false,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 0,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029390",
+ "target_address": "stack:0xffffffffffffffe0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029394",
+ "target_address": "stack:0xffffffffffffffd0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x100029398",
+ "target_address": "stack:0xffffffffffffffc0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x10002939c",
+ "target_address": "stack:0xffffffffffffffb0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ },
+ {
+ "source_address": "0x1000293a0",
+ "target_address": "stack:0xffffffffffffffa0",
+ "source_procedure": {
+ "address": "0x1000291b4",
+ "name": "FUN_1000291b4",
+ "classification": {
+ "external": false,
+ "thunk": false,
+ "thunk_target": null,
+ "provenance": "ghidra-function-manager"
+ },
+ "body": {
+ "available": true,
+ "provenance": "ghidra-function-body-address-set",
+ "ranges": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x10002936b"
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x1000293ab"
+ }
+ ],
+ "total_bytes": 480,
+ "span_bytes": 504,
+ "non_contiguous": true,
+ "contains_entry": true
+ }
+ },
+ "target_procedure": null,
+ "kind": {
+ "available": true,
+ "provenance": "ghidra-reference-manager",
+ "type": "READ",
+ "flow": false,
+ "call": false,
+ "jump": false,
+ "data": true,
+ "read": true,
+ "write": false,
+ "indirect": false,
+ "computed": false,
+ "conditional": false,
+ "terminal": false,
+ "primary": true,
+ "operand_index": 2,
+ "external": false
+ }
+ }
+ ],
+ "referenced_strings": [],
+ "referenced_names": [
+ {
+ "address": "0x100029248",
+ "value": "LAB_100029248",
+ "source_address": "0x100029224"
+ },
+ {
+ "address": "0x100029258",
+ "value": "LAB_100029258",
+ "source_address": "0x100029214"
+ },
+ {
+ "address": "0x100029264",
+ "value": "LAB_100029264",
+ "source_address": "0x100029244"
+ },
+ {
+ "address": "0x100029264",
+ "value": "LAB_100029264",
+ "source_address": "0x100029254"
+ },
+ {
+ "address": "0x100029330",
+ "value": "LAB_100029330",
+ "source_address": "0x10002934c"
+ },
+ {
+ "address": "0x100029350",
+ "value": "LAB_100029350",
+ "source_address": "0x100029328"
+ },
+ {
+ "address": "0x100029384",
+ "value": "LAB_100029384",
+ "source_address": "0x1000291d4"
+ },
+ {
+ "address": "0x100029384",
+ "value": "LAB_100029384",
+ "source_address": "0x1000291fc"
+ },
+ {
+ "address": "0x100029384",
+ "value": "LAB_100029384",
+ "source_address": "0x100029234"
+ },
+ {
+ "address": "0x100029384",
+ "value": "LAB_100029384",
+ "source_address": "0x1000292a0"
+ },
+ {
+ "address": "0x100029384",
+ "value": "LAB_100029384",
+ "source_address": "0x1000292b4"
+ },
+ {
+ "address": "0x100029388",
+ "value": "LAB_100029388",
+ "source_address": "0x100029368"
+ },
+ {
+ "address": "0x100055488",
+ "value": "_CGRectGetHeight",
+ "source_address": "0x100029290"
+ },
+ {
+ "address": "0x1000554dc",
+ "value": "_CGRectGetWidth",
+ "source_address": "0x100029278"
+ },
+ {
+ "address": "0x100055500",
+ "value": "_CGRectIsEmpty",
+ "source_address": "0x1000291f8"
+ },
+ {
+ "address": "0x100055590",
+ "value": "_IOSurfaceGetBaseAddress",
+ "source_address": "0x1000292fc"
+ },
+ {
+ "address": "0x10005559c",
+ "value": "_IOSurfaceGetBytesPerRow",
+ "source_address": "0x100029308"
+ },
+ {
+ "address": "0x1000555a8",
+ "value": "_IOSurfaceGetHeight",
+ "source_address": "0x100029314"
+ },
+ {
+ "address": "0x1000555b4",
+ "value": "_IOSurfaceGetPixelFormat",
+ "source_address": "0x100029204"
+ },
+ {
+ "address": "0x1000555cc",
+ "value": "_IOSurfaceLock",
+ "source_address": "0x1000292f4"
+ },
+ {
+ "address": "0x1000555d8",
+ "value": "_IOSurfaceUnlock",
+ "source_address": "0x10002935c"
+ },
+ {
+ "address": "0x1000557dc",
+ "value": "_calloc",
+ "source_address": "0x1000292b0"
+ },
+ {
+ "address": "0x10005586c",
+ "value": "_free",
+ "source_address": "0x100029364"
+ },
+ {
+ "address": "0x1000558d8",
+ "value": "_memcpy",
+ "source_address": "0x10002933c"
+ },
+ {
+ "address": "0x10005a900",
+ "value": "objc_stub::render:toBitmap:rowBytes:bounds:format:colorSpace:",
+ "source_address": "0x1000292e4"
+ },
+ {
+ "address": "0x100078160",
+ "value": "PTR__kCIFormatBGRA8_100078160",
+ "source_address": "0x10002925c"
+ },
+ {
+ "address": "0x100078178",
+ "value": "PTR__kCIFormatRGBAf_100078178",
+ "source_address": "0x10002924c"
+ },
+ {
+ "address": "0x100078180",
+ "value": "PTR__kCIFormatRGBAh_100078180",
+ "source_address": "0x10002923c"
+ },
+ {
+ "address": "0x1000a9400",
+ "value": "_kCIFormatBGRA8",
+ "source_address": "0x100029264"
+ },
+ {
+ "address": "0x1000a9700",
+ "value": "_kCIFormatRGBAf",
+ "source_address": "0x100029264"
+ },
+ {
+ "address": "0x1000a9800",
+ "value": "_kCIFormatRGBAh",
+ "source_address": "0x100029264"
+ }
+ ],
+ "basic_blocks": [
+ {
+ "start": "0x1000291b4",
+ "end": "0x1000291d8",
+ "successors": [
+ "0x1000291d8",
+ "0x100029384"
+ ]
+ },
+ {
+ "start": "0x1000291d8",
+ "end": "0x100029200",
+ "successors": [
+ "0x100029200",
+ "0x100029384"
+ ]
+ },
+ {
+ "start": "0x100029200",
+ "end": "0x100029218",
+ "successors": [
+ "0x100029218",
+ "0x100029258"
+ ]
+ },
+ {
+ "start": "0x100029218",
+ "end": "0x100029228",
+ "successors": [
+ "0x100029228",
+ "0x100029248"
+ ]
+ },
+ {
+ "start": "0x100029228",
+ "end": "0x100029238",
+ "successors": [
+ "0x100029238",
+ "0x100029384"
+ ]
+ },
+ {
+ "start": "0x100029238",
+ "end": "0x100029248",
+ "successors": [
+ "0x100029264"
+ ]
+ },
+ {
+ "start": "0x100029248",
+ "end": "0x100029258",
+ "successors": [
+ "0x100029264"
+ ]
+ },
+ {
+ "start": "0x100029258",
+ "end": "0x100029264",
+ "successors": [
+ "0x100029264"
+ ]
+ },
+ {
+ "start": "0x100029264",
+ "end": "0x1000292a4",
+ "successors": [
+ "0x1000292a4",
+ "0x100029384"
+ ]
+ },
+ {
+ "start": "0x1000292a4",
+ "end": "0x1000292b8",
+ "successors": [
+ "0x1000292b8",
+ "0x100029384"
+ ]
+ },
+ {
+ "start": "0x1000292b8",
+ "end": "0x10002932c",
+ "successors": [
+ "0x10002932c",
+ "0x100029350"
+ ]
+ },
+ {
+ "start": "0x10002932c",
+ "end": "0x100029330",
+ "successors": [
+ "0x100029330"
+ ]
+ },
+ {
+ "start": "0x100029330",
+ "end": "0x100029350",
+ "successors": [
+ "0x100029330",
+ "0x100029350"
+ ]
+ },
+ {
+ "start": "0x100029350",
+ "end": "0x10002936c",
+ "successors": [
+ "0x100029388"
+ ]
+ },
+ {
+ "start": "0x100029384",
+ "end": "0x100029388",
+ "successors": [
+ "0x100029388"
+ ]
+ },
+ {
+ "start": "0x100029388",
+ "end": "0x1000293ac",
+ "successors": []
+ }
+ ],
+ "native_api": {
+ "available": true,
+ "provenance": "ghidra-high-function",
+ "signature_source": "default",
+ "calling_convention": "__swiftcall",
+ "return_type": {
+ "ordinal": null,
+ "name": null,
+ "data_type": "bool",
+ "size_bytes": 1,
+ "storage": "w0:1",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type bool."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage"
+ ],
+ "role": "return"
+ },
+ "parameters": [
+ {
+ "ordinal": 0,
+ "name": "param_1",
+ "data_type": "double",
+ "size_bytes": 8,
+ "storage": "d0:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type double."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 1,
+ "name": "param_2",
+ "data_type": "undefined8",
+ "size_bytes": 8,
+ "storage": "d1:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type undefined8."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 2,
+ "name": "param_3",
+ "data_type": "undefined8",
+ "size_bytes": 8,
+ "storage": "d2:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type undefined8."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 3,
+ "name": "param_4",
+ "data_type": "undefined8",
+ "size_bytes": 8,
+ "storage": "d3:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type undefined8."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 4,
+ "name": "param_5",
+ "data_type": "ulong",
+ "size_bytes": 8,
+ "storage": "x0:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type ulong."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 5,
+ "name": "param_6",
+ "data_type": "ID",
+ "size_bytes": 8,
+ "storage": "x1:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type ID."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 6,
+ "name": "param_7",
+ "data_type": "void *",
+ "size_bytes": 8,
+ "storage": "x2:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type void *."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ },
+ {
+ "ordinal": 7,
+ "name": "param_8",
+ "data_type": "undefined8",
+ "size_bytes": 8,
+ "storage": "x3:8",
+ "confidence": "low",
+ "evidence": [
+ {
+ "kind": "signature-source",
+ "source": "ghidra-function-manager",
+ "detail": "Function signature source is default."
+ },
+ {
+ "kind": "decompiler-type",
+ "source": "ghidra-high-function",
+ "detail": "HighFunction recovered data type undefined8."
+ }
+ ],
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-or-stack-storage",
+ "compiler-generated-variable"
+ ],
+ "role": "parameter"
+ }
+ ],
+ "jump_tables": [],
+ "pseudocode": {
+ "classification": "decompiler-generated-non-source",
+ "compilable": false
+ },
+ "decompiler_artifacts": [
+ "recovered-signature",
+ "register-and-stack-variables",
+ "compiler-generated-control-flow",
+ "pointer-arithmetic",
+ "pseudocode"
+ ],
+ "limitations": [
+ "Types and calling conventions are Ghidra decompiler observations, not source declarations.",
+ "Register variables, compiler-generated blocks, and pointer arithmetic remain decompiler artifacts.",
+ "Pseudocode is neither original source nor guaranteed to compile."
+ ]
+ },
+ "native_value_flow": {
+ "available": true,
+ "provenance": "ghidra-high-pcode",
+ "operations": [
+ {
+ "id": "0x1000291d4#45",
+ "address": "0x1000291d4",
+ "sequence": 45,
+ "opcode": "INT_NOTEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x31700",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000291d4#46",
+ "address": "0x1000291d4",
+ "sequence": 46,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029384",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x31700",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000291f8#68",
+ "address": "0x1000291f8",
+ "sequence": 68,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100055500",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000291f8#701",
+ "address": "0x1000291f8",
+ "sequence": 701,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000c0",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "44"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000291f8#1379",
+ "address": "0x1000291f8",
+ "sequence": 1379,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "44"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000291f8#1397",
+ "address": "0x1000291f8",
+ "sequence": 1397,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "44"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000291f8#1415",
+ "address": "0x1000291f8",
+ "sequence": 1415,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "44"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000291f8#1711",
+ "address": "0x1000291f8",
+ "sequence": 1711,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000c0",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000291fc#71",
+ "address": "0x1000291fc",
+ "sequence": 71,
+ "opcode": "INT_EQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000075",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x30d00",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000291fc#73",
+ "address": "0x1000291fc",
+ "sequence": 73,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029384",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x30d00",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000291fc#1358",
+ "address": "0x1000291fc",
+ "sequence": 1358,
+ "opcode": "INT_AND",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "1"
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000075",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029204#76",
+ "address": "0x100029204",
+ "sequence": 76,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x1000555b4",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029204#702",
+ "address": "0x100029204",
+ "sequence": 702,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000c8",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "4c"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029204#1380",
+ "address": "0x100029204",
+ "sequence": 1380,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "4c"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029204#1398",
+ "address": "0x100029204",
+ "sequence": 1398,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "4c"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029204#1416",
+ "address": "0x100029204",
+ "sequence": 1416,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "4c"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029204#1712",
+ "address": "0x100029204",
+ "sequence": 1712,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4010",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000c8",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029210#85",
+ "address": "0x100029210",
+ "sequence": 85,
+ "opcode": "INT_EQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 4,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "42475241"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029210#694",
+ "address": "0x100029210",
+ "sequence": 694,
+ "opcode": "SUBPIECE",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 4,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029214#90",
+ "address": "0x100029214",
+ "sequence": 90,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029258",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029220#99",
+ "address": "0x100029220",
+ "sequence": 99,
+ "opcode": "INT_EQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 4,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "52476641"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029224#104",
+ "address": "0x100029224",
+ "sequence": 104,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029248",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029230#113",
+ "address": "0x100029230",
+ "sequence": 113,
+ "opcode": "INT_NOTEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 4,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "52476841"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029234#119",
+ "address": "0x100029234",
+ "sequence": 119,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029384",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029240#123",
+ "address": "0x100029240",
+ "sequence": 123,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "8"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40a8",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029244#124",
+ "address": "0x100029244",
+ "sequence": 124,
+ "opcode": "BRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029264",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029244#1718",
+ "address": "0x100029244",
+ "sequence": 1718,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000130",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000f8",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029244#1725",
+ "address": "0x100029244",
+ "sequence": 1725,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000130",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029250#403",
+ "address": "0x100029250",
+ "sequence": 403,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "10"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40a8",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029254#404",
+ "address": "0x100029254",
+ "sequence": 404,
+ "opcode": "BRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029264",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029254#1716",
+ "address": "0x100029254",
+ "sequence": 1716,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000128",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000e8",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029254#1724",
+ "address": "0x100029254",
+ "sequence": 1724,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000128",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029260#408",
+ "address": "0x100029260",
+ "sequence": 408,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "4"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40a8",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029260#1717",
+ "address": "0x100029260",
+ "sequence": 1717,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000120",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000f0",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029260#1723",
+ "address": "0x100029260",
+ "sequence": 1723,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000120",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029264#126",
+ "address": "0x100029264",
+ "sequence": 126,
+ "opcode": "LOAD",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "1b1"
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4040",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 4,
+ "location": "unique:0x49000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029264#127",
+ "address": "0x100029264",
+ "sequence": 127,
+ "opcode": "INT_ZEXT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 4,
+ "location": "unique:0x49000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c8",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029264#846",
+ "address": "0x100029264",
+ "sequence": 846,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000f8",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000e8",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000f0",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4040",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029264#852",
+ "address": "0x100029264",
+ "sequence": 852,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40a8",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40a8",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40a8",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40a8",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029278#145",
+ "address": "0x100029278",
+ "sequence": 145,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x1000554dc",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5000",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5020",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5040",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5060",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029278#876",
+ "address": "0x100029278",
+ "sequence": 876,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000110",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "91"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029278#1381",
+ "address": "0x100029278",
+ "sequence": 1381,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "91"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029278#1399",
+ "address": "0x100029278",
+ "sequence": 1399,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "91"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029278#1417",
+ "address": "0x100029278",
+ "sequence": 1417,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "91"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029278#1721",
+ "address": "0x100029278",
+ "sequence": 1721,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000110",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002927c#146",
+ "address": "0x10002927c",
+ "sequence": 146,
+ "opcode": "TRUNC",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c0",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029290#164",
+ "address": "0x100029290",
+ "sequence": 164,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100055488",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5000",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5020",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5040",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5060",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029290#877",
+ "address": "0x100029290",
+ "sequence": 877,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000118",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "a4"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029290#1382",
+ "address": "0x100029290",
+ "sequence": 1382,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "a4"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029290#1400",
+ "address": "0x100029290",
+ "sequence": 1400,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "a4"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029290#1418",
+ "address": "0x100029290",
+ "sequence": 1418,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "a4"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029290#1722",
+ "address": "0x100029290",
+ "sequence": 1722,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000118",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029294#165",
+ "address": "0x100029294",
+ "sequence": 165,
+ "opcode": "TRUNC",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000138",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029294#1726",
+ "address": "0x100029294",
+ "sequence": 1726,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000138",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40d0",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029298#171",
+ "address": "0x100029298",
+ "sequence": 171,
+ "opcode": "INT_NOTEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c0",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002929c#1369",
+ "address": "0x10002929c",
+ "sequence": 1369,
+ "opcode": "INT_NOTEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40d0",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292a0#199",
+ "address": "0x1000292a0",
+ "sequence": 199,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029384",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x100000b3",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000292a0#1674",
+ "address": "0x1000292a0",
+ "sequence": 1674,
+ "opcode": "BOOL_AND",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x100000b3",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292a4#200",
+ "address": "0x1000292a4",
+ "sequence": 200,
+ "opcode": "INT_MULT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c0",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40a8",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000140",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292a4#1727",
+ "address": "0x1000292a4",
+ "sequence": 1727,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000140",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c0",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292a8#201",
+ "address": "0x1000292a8",
+ "sequence": 201,
+ "opcode": "INT_MULT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000148",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000150",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292a8#1728",
+ "address": "0x1000292a8",
+ "sequence": 1728,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c0",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000148",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292a8#1729",
+ "address": "0x1000292a8",
+ "sequence": 1729,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40d0",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000150",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292b0#204",
+ "address": "0x1000292b0",
+ "sequence": 204,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x1000557dc",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "1"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292b0#1383",
+ "address": "0x1000292b0",
+ "sequence": 1383,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "cc"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292b0#1401",
+ "address": "0x1000292b0",
+ "sequence": 1401,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "cc"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292b0#1419",
+ "address": "0x1000292b0",
+ "sequence": 1419,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "cc"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292b4#205",
+ "address": "0x1000292b4",
+ "sequence": 205,
+ "opcode": "INT_NOTEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x31700",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292b4#206",
+ "address": "0x1000292b4",
+ "sequence": 206,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029384",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x31700",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000292e4#231",
+ "address": "0x1000292e4",
+ "sequence": 231,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x10005a900",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4008",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5000",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5020",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5040",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x5060",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c0",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c8",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4018",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000292e4#1384",
+ "address": "0x1000292e4",
+ "sequence": 1384,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "e7"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292e4#1402",
+ "address": "0x1000292e4",
+ "sequence": 1402,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "e7"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292e4#1420",
+ "address": "0x1000292e4",
+ "sequence": 1420,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "e7"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292f4#236",
+ "address": "0x1000292f4",
+ "sequence": 236,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x1000555cc",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4010",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000292f4#1385",
+ "address": "0x1000292f4",
+ "sequence": 1385,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "ec"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292f4#1403",
+ "address": "0x1000292f4",
+ "sequence": 1403,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "ec"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292f4#1421",
+ "address": "0x1000292f4",
+ "sequence": 1421,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "ec"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292fc#239",
+ "address": "0x1000292fc",
+ "sequence": 239,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100055590",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000292fc#706",
+ "address": "0x1000292fc",
+ "sequence": 706,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000d0",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "ef"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292fc#1386",
+ "address": "0x1000292fc",
+ "sequence": 1386,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "ef"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292fc#1404",
+ "address": "0x1000292fc",
+ "sequence": 1404,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "ef"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292fc#1422",
+ "address": "0x1000292fc",
+ "sequence": 1422,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "ef"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000292fc#1713",
+ "address": "0x1000292fc",
+ "sequence": 1713,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4010",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000d0",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029308#243",
+ "address": "0x100029308",
+ "sequence": 243,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x10005559c",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029308#707",
+ "address": "0x100029308",
+ "sequence": 707,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000d8",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "f3"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029308#1387",
+ "address": "0x100029308",
+ "sequence": 1387,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "f3"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029308#1405",
+ "address": "0x100029308",
+ "sequence": 1405,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "f3"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029308#1423",
+ "address": "0x100029308",
+ "sequence": 1423,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "f3"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029308#1714",
+ "address": "0x100029308",
+ "sequence": 1714,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4010",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000d8",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029314#247",
+ "address": "0x100029314",
+ "sequence": 247,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x1000555a8",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029314#708",
+ "address": "0x100029314",
+ "sequence": 708,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000e0",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "f7"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029314#1388",
+ "address": "0x100029314",
+ "sequence": 1388,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "f7"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029314#1406",
+ "address": "0x100029314",
+ "sequence": 1406,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "f7"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029314#1424",
+ "address": "0x100029314",
+ "sequence": 1424,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "f7"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029314#1715",
+ "address": "0x100029314",
+ "sequence": 1715,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4010",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x100000e0",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029318#248",
+ "address": "0x100029318",
+ "sequence": 248,
+ "opcode": "INT_LESSEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c0",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x105",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002931c#1371",
+ "address": "0x10002931c",
+ "sequence": 1371,
+ "opcode": "INT_LESSEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40d0",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x105",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029320#1372",
+ "address": "0x100029320",
+ "sequence": 1372,
+ "opcode": "INT_NOTEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029324#300",
+ "address": "0x100029324",
+ "sequence": 300,
+ "opcode": "BOOL_AND",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x100000ac",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x4600",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029324#1375",
+ "address": "0x100029324",
+ "sequence": 1375,
+ "opcode": "BOOL_AND",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x105",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x105",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x100000ac",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029328#302",
+ "address": "0x100029328",
+ "sequence": 302,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029350",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x100000bb",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029328#1686",
+ "address": "0x100029328",
+ "sequence": 1686,
+ "opcode": "BOOL_AND",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x100000bc",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x100000bb",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029328#1687",
+ "address": "0x100029328",
+ "sequence": 1687,
+ "opcode": "BOOL_AND",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x105",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x105",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x100000bc",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029328#1720",
+ "address": "0x100029328",
+ "sequence": 1720,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000108",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029330#855",
+ "address": "0x100029330",
+ "sequence": 855,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x24200",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40b0",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029330#863",
+ "address": "0x100029330",
+ "sequence": 863,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000100",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000108",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c8",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029330#867",
+ "address": "0x100029330",
+ "sequence": 867,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x7b100",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40d0",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40d0",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029330#1394",
+ "address": "0x100029330",
+ "sequence": 1394,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029330#1412",
+ "address": "0x100029330",
+ "sequence": 1412,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029330#1430",
+ "address": "0x100029330",
+ "sequence": 1430,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002933c#308",
+ "address": "0x10002933c",
+ "sequence": 308,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x1000558d8",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40b0",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c8",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000158",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x10002933c#1389",
+ "address": "0x10002933c",
+ "sequence": 1389,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "134"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002933c#1407",
+ "address": "0x10002933c",
+ "sequence": 1407,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "134"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002933c#1425",
+ "address": "0x10002933c",
+ "sequence": 1425,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "134"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002933c#1730",
+ "address": "0x10002933c",
+ "sequence": 1730,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c0",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000158",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029340#312",
+ "address": "0x100029340",
+ "sequence": 312,
+ "opcode": "INT_ADD",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000160",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000168",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000170",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029340#1731",
+ "address": "0x100029340",
+ "sequence": 1731,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c8",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029340#1732",
+ "address": "0x100029340",
+ "sequence": 1732,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40c0",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000168",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029340#1733",
+ "address": "0x100029340",
+ "sequence": 1733,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000170",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x24200",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029344#319",
+ "address": "0x100029344",
+ "sequence": 319,
+ "opcode": "INT_ADD",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000178",
+ "constant_hex": null
+ },
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000180",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000188",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029344#1734",
+ "address": "0x100029344",
+ "sequence": 1734,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40b0",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029344#1735",
+ "address": "0x100029344",
+ "sequence": 1735,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029344#1736",
+ "address": "0x100029344",
+ "sequence": 1736,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000188",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x24200",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029348#326",
+ "address": "0x100029348",
+ "sequence": 326,
+ "opcode": "INT_ADD",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000190",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "ffffffffffffffff"
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000198",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029348#328",
+ "address": "0x100029348",
+ "sequence": 328,
+ "opcode": "INT_NOTEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x7b100",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029348#1737",
+ "address": "0x100029348",
+ "sequence": 1737,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x40d0",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000190",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029348#1738",
+ "address": "0x100029348",
+ "sequence": 1738,
+ "opcode": "CAST",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000198",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x7b100",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002934c#335",
+ "address": "0x10002934c",
+ "sequence": 335,
+ "opcode": "CBRANCH",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 1,
+ "location": "0x100029330",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x108",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x10002934c#1719",
+ "address": "0x10002934c",
+ "sequence": 1719,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x24200",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "unique",
+ "size_bytes": 8,
+ "location": "unique:0x10000100",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029350#1393",
+ "address": "0x100029350",
+ "sequence": 1393,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029350#1411",
+ "address": "0x100029350",
+ "sequence": 1411,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029350#1429",
+ "address": "0x100029350",
+ "sequence": 1429,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002935c#340",
+ "address": "0x10002935c",
+ "sequence": 340,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x1000555d8",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4010",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x10002935c#1390",
+ "address": "0x10002935c",
+ "sequence": 1390,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "154"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002935c#1408",
+ "address": "0x10002935c",
+ "sequence": 1408,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "154"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x10002935c#1426",
+ "address": "0x10002935c",
+ "sequence": 1426,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "154"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029364#343",
+ "address": "0x100029364",
+ "sequence": 343,
+ "opcode": "CALL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x10005586c",
+ "constant_hex": null
+ },
+ {
+ "kind": "register",
+ "size_bytes": 8,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x100029364#1391",
+ "address": "0x100029364",
+ "sequence": 1391,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "157"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029364#1409",
+ "address": "0x100029364",
+ "sequence": 1409,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "157"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029364#1427",
+ "address": "0x100029364",
+ "sequence": 1427,
+ "opcode": "INDIRECT",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "constant",
+ "size_bytes": 4,
+ "location": null,
+ "constant_hex": "157"
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029384#1396",
+ "address": "0x100029384",
+ "sequence": 1396,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029384#1414",
+ "address": "0x100029384",
+ "sequence": 1414,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029384#1432",
+ "address": "0x100029384",
+ "sequence": 1432,
+ "opcode": "MULTIEQUAL",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ },
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029388#1395",
+ "address": "0x100029388",
+ "sequence": 1395,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029388#1413",
+ "address": "0x100029388",
+ "sequence": 1413,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029388#1431",
+ "address": "0x100029388",
+ "sequence": 1431,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029388#1684",
+ "address": "0x100029388",
+ "sequence": 1684,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 1,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029388#1695",
+ "address": "0x100029388",
+ "sequence": 1695,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "unique",
+ "size_bytes": 1,
+ "location": "unique:0x4600",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x100029388#1706",
+ "address": "0x100029388",
+ "sequence": 1706,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 1,
+ "location": null,
+ "constant_hex": "0"
+ }
+ ],
+ "output": {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000293a8#398",
+ "address": "0x1000293a8",
+ "sequence": 398,
+ "opcode": "RETURN",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000293a8#1392",
+ "address": "0x1000293a8",
+ "sequence": 1392,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000293a8#1410",
+ "address": "0x1000293a8",
+ "sequence": 1410,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000293a8#1428",
+ "address": "0x1000293a8",
+ "sequence": 1428,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000293a8#1696",
+ "address": "0x1000293a8",
+ "sequence": 1696,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000293a8#1697",
+ "address": "0x1000293a8",
+ "sequence": 1697,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000293a8#1698",
+ "address": "0x1000293a8",
+ "sequence": 1698,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000293a8#1699",
+ "address": "0x1000293a8",
+ "sequence": 1699,
+ "opcode": "RETURN",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ },
+ {
+ "id": "0x1000293a8#1707",
+ "address": "0x1000293a8",
+ "sequence": 1707,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078160",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000293a8#1708",
+ "address": "0x1000293a8",
+ "sequence": 1708,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078178",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000293a8#1709",
+ "address": "0x1000293a8",
+ "sequence": 1709,
+ "opcode": "COPY",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ ],
+ "output": {
+ "kind": "address",
+ "size_bytes": 8,
+ "location": "0x100078180",
+ "constant_hex": null
+ }
+ },
+ {
+ "id": "0x1000293a8#1710",
+ "address": "0x1000293a8",
+ "sequence": 1710,
+ "opcode": "RETURN",
+ "is_dead": true,
+ "block_membership": "member",
+ "inputs": [
+ {
+ "kind": "constant",
+ "size_bytes": 8,
+ "location": null,
+ "constant_hex": "0"
+ },
+ {
+ "kind": "register",
+ "size_bytes": 1,
+ "location": "register:0x4000",
+ "constant_hex": null
+ }
+ ],
+ "output": null
+ }
+ ],
+ "def_use": [
+ {
+ "definition": "0x1000291d4#45",
+ "use": "0x1000291d4#46",
+ "input_index": 1
+ },
+ {
+ "definition": "0x1000291f8#1711",
+ "use": "0x1000291f8#701",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000291fc#1358",
+ "use": "0x1000291fc#71",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000291fc#71",
+ "use": "0x1000291fc#73",
+ "input_index": 1
+ },
+ {
+ "definition": "0x1000291f8#701",
+ "use": "0x1000291fc#1358",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029204#1712",
+ "use": "0x100029204#702",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000291f8#1379",
+ "use": "0x100029204#1380",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000291f8#1397",
+ "use": "0x100029204#1398",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000291f8#1415",
+ "use": "0x100029204#1416",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029210#694",
+ "use": "0x100029210#85",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029204#702",
+ "use": "0x100029210#694",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029210#85",
+ "use": "0x100029214#90",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029210#694",
+ "use": "0x100029220#99",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029220#99",
+ "use": "0x100029224#104",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029210#694",
+ "use": "0x100029230#113",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029230#113",
+ "use": "0x100029234#119",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029244#1725",
+ "use": "0x100029244#1718",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029204#1416",
+ "use": "0x100029244#1725",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029254#1724",
+ "use": "0x100029254#1716",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029204#1398",
+ "use": "0x100029254#1724",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029260#1723",
+ "use": "0x100029260#1717",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029204#1380",
+ "use": "0x100029260#1723",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029264#846",
+ "use": "0x100029264#126",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029264#126",
+ "use": "0x100029264#127",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029244#1718",
+ "use": "0x100029264#846",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029254#1716",
+ "use": "0x100029264#846",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029260#1717",
+ "use": "0x100029264#846",
+ "input_index": 2
+ },
+ {
+ "definition": "0x100029240#123",
+ "use": "0x100029264#852",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029250#403",
+ "use": "0x100029264#852",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029260#408",
+ "use": "0x100029264#852",
+ "input_index": 2
+ },
+ {
+ "definition": "0x100029278#1721",
+ "use": "0x100029278#876",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029204#1380",
+ "use": "0x100029278#1381",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029204#1398",
+ "use": "0x100029278#1399",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029204#1416",
+ "use": "0x100029278#1417",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029278#876",
+ "use": "0x10002927c#146",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029290#1722",
+ "use": "0x100029290#877",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029278#1381",
+ "use": "0x100029290#1382",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029278#1399",
+ "use": "0x100029290#1400",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029278#1417",
+ "use": "0x100029290#1418",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029290#877",
+ "use": "0x100029294#165",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029294#165",
+ "use": "0x100029294#1726",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002927c#146",
+ "use": "0x100029298#171",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029294#1726",
+ "use": "0x10002929c#1369",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292a0#1674",
+ "use": "0x1000292a0#199",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029298#171",
+ "use": "0x1000292a0#1674",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002929c#1369",
+ "use": "0x1000292a0#1674",
+ "input_index": 1
+ },
+ {
+ "definition": "0x10002927c#146",
+ "use": "0x1000292a4#200",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029264#852",
+ "use": "0x1000292a4#200",
+ "input_index": 1
+ },
+ {
+ "definition": "0x1000292a4#200",
+ "use": "0x1000292a4#1727",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292a8#1728",
+ "use": "0x1000292a8#201",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292a8#1729",
+ "use": "0x1000292a8#201",
+ "input_index": 1
+ },
+ {
+ "definition": "0x1000292a4#1727",
+ "use": "0x1000292a8#1728",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029294#1726",
+ "use": "0x1000292a8#1729",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292a8#201",
+ "use": "0x1000292b0#204",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029290#1382",
+ "use": "0x1000292b0#1383",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029290#1400",
+ "use": "0x1000292b0#1401",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029290#1418",
+ "use": "0x1000292b0#1419",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292b0#204",
+ "use": "0x1000292b4#205",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292b4#205",
+ "use": "0x1000292b4#206",
+ "input_index": 1
+ },
+ {
+ "definition": "0x1000292b0#204",
+ "use": "0x1000292e4#231",
+ "input_index": 7
+ },
+ {
+ "definition": "0x1000292a4#1727",
+ "use": "0x1000292e4#231",
+ "input_index": 8
+ },
+ {
+ "definition": "0x100029264#127",
+ "use": "0x1000292e4#231",
+ "input_index": 9
+ },
+ {
+ "definition": "0x1000292b0#1383",
+ "use": "0x1000292e4#1384",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292b0#1401",
+ "use": "0x1000292e4#1402",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292b0#1419",
+ "use": "0x1000292e4#1420",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292e4#1384",
+ "use": "0x1000292f4#1385",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292e4#1402",
+ "use": "0x1000292f4#1403",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292e4#1420",
+ "use": "0x1000292f4#1421",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292fc#1713",
+ "use": "0x1000292fc#706",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292f4#1385",
+ "use": "0x1000292fc#1386",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292f4#1403",
+ "use": "0x1000292fc#1404",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292f4#1421",
+ "use": "0x1000292fc#1422",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029308#1714",
+ "use": "0x100029308#707",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292fc#1386",
+ "use": "0x100029308#1387",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292fc#1404",
+ "use": "0x100029308#1405",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292fc#1422",
+ "use": "0x100029308#1423",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029314#1715",
+ "use": "0x100029314#708",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029308#1387",
+ "use": "0x100029314#1388",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029308#1405",
+ "use": "0x100029314#1406",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029308#1423",
+ "use": "0x100029314#1424",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292a4#1727",
+ "use": "0x100029318#248",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029308#707",
+ "use": "0x100029318#248",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029294#1726",
+ "use": "0x10002931c#1371",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029314#708",
+ "use": "0x10002931c#1371",
+ "input_index": 1
+ },
+ {
+ "definition": "0x1000292fc#706",
+ "use": "0x100029320#1372",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029324#1375",
+ "use": "0x100029324#300",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029320#1372",
+ "use": "0x100029324#300",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029318#248",
+ "use": "0x100029324#1375",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002931c#1371",
+ "use": "0x100029324#1375",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029328#1686",
+ "use": "0x100029328#302",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029328#1687",
+ "use": "0x100029328#1686",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029320#1372",
+ "use": "0x100029328#1686",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029318#248",
+ "use": "0x100029328#1687",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002931c#1371",
+ "use": "0x100029328#1687",
+ "input_index": 1
+ },
+ {
+ "definition": "0x1000292b0#204",
+ "use": "0x100029328#1720",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029344#1736",
+ "use": "0x100029330#855",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292fc#706",
+ "use": "0x100029330#855",
+ "input_index": 1
+ },
+ {
+ "definition": "0x10002934c#1719",
+ "use": "0x100029330#863",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029328#1720",
+ "use": "0x100029330#863",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029348#1738",
+ "use": "0x100029330#867",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029294#1726",
+ "use": "0x100029330#867",
+ "input_index": 1
+ },
+ {
+ "definition": "0x10002933c#1389",
+ "use": "0x100029330#1394",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029314#1388",
+ "use": "0x100029330#1394",
+ "input_index": 1
+ },
+ {
+ "definition": "0x10002933c#1407",
+ "use": "0x100029330#1412",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029314#1406",
+ "use": "0x100029330#1412",
+ "input_index": 1
+ },
+ {
+ "definition": "0x10002933c#1425",
+ "use": "0x100029330#1430",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029314#1424",
+ "use": "0x100029330#1430",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029330#855",
+ "use": "0x10002933c#308",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029330#863",
+ "use": "0x10002933c#308",
+ "input_index": 2
+ },
+ {
+ "definition": "0x10002933c#1730",
+ "use": "0x10002933c#308",
+ "input_index": 3
+ },
+ {
+ "definition": "0x100029330#1394",
+ "use": "0x10002933c#1389",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029330#1412",
+ "use": "0x10002933c#1407",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029330#1430",
+ "use": "0x10002933c#1425",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292a4#1727",
+ "use": "0x10002933c#1730",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029340#1731",
+ "use": "0x100029340#312",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029340#1732",
+ "use": "0x100029340#312",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029330#863",
+ "use": "0x100029340#1731",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292a4#1727",
+ "use": "0x100029340#1732",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029340#312",
+ "use": "0x100029340#1733",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029344#1734",
+ "use": "0x100029344#319",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029344#1735",
+ "use": "0x100029344#319",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029330#855",
+ "use": "0x100029344#1734",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029308#707",
+ "use": "0x100029344#1735",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029344#319",
+ "use": "0x100029344#1736",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029348#1737",
+ "use": "0x100029348#326",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029348#1738",
+ "use": "0x100029348#328",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029330#867",
+ "use": "0x100029348#1737",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029348#326",
+ "use": "0x100029348#1738",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029348#328",
+ "use": "0x10002934c#335",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029340#1733",
+ "use": "0x10002934c#1719",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029314#1388",
+ "use": "0x100029350#1393",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002933c#1389",
+ "use": "0x100029350#1393",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029314#1406",
+ "use": "0x100029350#1411",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002933c#1407",
+ "use": "0x100029350#1411",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029314#1424",
+ "use": "0x100029350#1429",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002933c#1425",
+ "use": "0x100029350#1429",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029350#1393",
+ "use": "0x10002935c#1390",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029350#1411",
+ "use": "0x10002935c#1408",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029350#1429",
+ "use": "0x10002935c#1426",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000292b0#204",
+ "use": "0x100029364#343",
+ "input_index": 1
+ },
+ {
+ "definition": "0x10002935c#1390",
+ "use": "0x100029364#1391",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002935c#1408",
+ "use": "0x100029364#1409",
+ "input_index": 0
+ },
+ {
+ "definition": "0x10002935c#1426",
+ "use": "0x100029364#1427",
+ "input_index": 0
+ },
+ {
+ "definition": "0x1000291f8#1379",
+ "use": "0x100029384#1396",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029290#1382",
+ "use": "0x100029384#1396",
+ "input_index": 2
+ },
+ {
+ "definition": "0x1000292b0#1383",
+ "use": "0x100029384#1396",
+ "input_index": 3
+ },
+ {
+ "definition": "0x1000291f8#1397",
+ "use": "0x100029384#1414",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029290#1400",
+ "use": "0x100029384#1414",
+ "input_index": 2
+ },
+ {
+ "definition": "0x1000292b0#1401",
+ "use": "0x100029384#1414",
+ "input_index": 3
+ },
+ {
+ "definition": "0x1000291f8#1415",
+ "use": "0x100029384#1432",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029290#1418",
+ "use": "0x100029384#1432",
+ "input_index": 2
+ },
+ {
+ "definition": "0x1000292b0#1419",
+ "use": "0x100029384#1432",
+ "input_index": 3
+ },
+ {
+ "definition": "0x100029384#1396",
+ "use": "0x100029388#1395",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029384#1414",
+ "use": "0x100029388#1413",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029384#1432",
+ "use": "0x100029388#1431",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029324#300",
+ "use": "0x100029388#1695",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029388#1684",
+ "use": "0x1000293a8#398",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029388#1395",
+ "use": "0x1000293a8#1392",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029388#1413",
+ "use": "0x1000293a8#1410",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029388#1431",
+ "use": "0x1000293a8#1428",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029364#1391",
+ "use": "0x1000293a8#1696",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029364#1409",
+ "use": "0x1000293a8#1697",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029364#1427",
+ "use": "0x1000293a8#1698",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029388#1695",
+ "use": "0x1000293a8#1699",
+ "input_index": 1
+ },
+ {
+ "definition": "0x100029204#1380",
+ "use": "0x1000293a8#1707",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029204#1398",
+ "use": "0x1000293a8#1708",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029204#1416",
+ "use": "0x1000293a8#1709",
+ "input_index": 0
+ },
+ {
+ "definition": "0x100029388#1706",
+ "use": "0x1000293a8#1710",
+ "input_index": 1
+ }
+ ],
+ "effects": [
+ {
+ "operation": "0x1000291d4#46",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x1000291f8#68",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x1000291fc#73",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x100029204#76",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x100029214#90",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x100029224#104",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x100029234#119",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x100029264#126",
+ "kind": "memory_read",
+ "operand_input": 1,
+ "value_input": null
+ },
+ {
+ "operation": "0x100029278#145",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x100029290#164",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x1000292a0#199",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x1000292b0#204",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x1000292b4#206",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x1000292e4#231",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x1000292f4#236",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x1000292fc#239",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x100029308#243",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x100029314#247",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x100029328#302",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x10002933c#308",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x10002934c#335",
+ "kind": "conditional_branch",
+ "operand_input": null,
+ "value_input": 1
+ },
+ {
+ "operation": "0x10002935c#340",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ },
+ {
+ "operation": "0x100029364#343",
+ "kind": "direct_call",
+ "operand_input": 0,
+ "value_input": null
+ }
+ ],
+ "parameters": [
+ {
+ "ordinal": 0,
+ "name": "param_1",
+ "data_type": "/double"
+ },
+ {
+ "ordinal": 1,
+ "name": "param_2",
+ "data_type": "/undefined8"
+ },
+ {
+ "ordinal": 2,
+ "name": "param_3",
+ "data_type": "/undefined8"
+ },
+ {
+ "ordinal": 3,
+ "name": "param_4",
+ "data_type": "/undefined8"
+ },
+ {
+ "ordinal": 4,
+ "name": "param_5",
+ "data_type": "/ulong"
+ },
+ {
+ "ordinal": 5,
+ "name": "param_6",
+ "data_type": "/_objc2_/ID"
+ },
+ {
+ "ordinal": 6,
+ "name": "param_7",
+ "data_type": "/void *"
+ },
+ {
+ "ordinal": 7,
+ "name": "param_8",
+ "data_type": "/undefined8"
+ }
+ ],
+ "parameter_uses": [
+ {
+ "ordinal": 4,
+ "use": "0x1000291d4#45",
+ "input_index": 0
+ },
+ {
+ "ordinal": 4,
+ "use": "0x1000291f8#1711",
+ "input_index": 0
+ },
+ {
+ "ordinal": 6,
+ "use": "0x100029204#1712",
+ "input_index": 0
+ },
+ {
+ "ordinal": 0,
+ "use": "0x100029278#145",
+ "input_index": 1
+ },
+ {
+ "ordinal": 1,
+ "use": "0x100029278#145",
+ "input_index": 2
+ },
+ {
+ "ordinal": 2,
+ "use": "0x100029278#145",
+ "input_index": 3
+ },
+ {
+ "ordinal": 3,
+ "use": "0x100029278#145",
+ "input_index": 4
+ },
+ {
+ "ordinal": 0,
+ "use": "0x100029278#1721",
+ "input_index": 0
+ },
+ {
+ "ordinal": 0,
+ "use": "0x100029290#164",
+ "input_index": 1
+ },
+ {
+ "ordinal": 1,
+ "use": "0x100029290#164",
+ "input_index": 2
+ },
+ {
+ "ordinal": 2,
+ "use": "0x100029290#164",
+ "input_index": 3
+ },
+ {
+ "ordinal": 3,
+ "use": "0x100029290#164",
+ "input_index": 4
+ },
+ {
+ "ordinal": 0,
+ "use": "0x100029290#1722",
+ "input_index": 0
+ },
+ {
+ "ordinal": 5,
+ "use": "0x1000292e4#231",
+ "input_index": 1
+ },
+ {
+ "ordinal": 0,
+ "use": "0x1000292e4#231",
+ "input_index": 2
+ },
+ {
+ "ordinal": 1,
+ "use": "0x1000292e4#231",
+ "input_index": 3
+ },
+ {
+ "ordinal": 2,
+ "use": "0x1000292e4#231",
+ "input_index": 4
+ },
+ {
+ "ordinal": 3,
+ "use": "0x1000292e4#231",
+ "input_index": 5
+ },
+ {
+ "ordinal": 4,
+ "use": "0x1000292e4#231",
+ "input_index": 6
+ },
+ {
+ "ordinal": 7,
+ "use": "0x1000292e4#231",
+ "input_index": 10
+ },
+ {
+ "ordinal": 6,
+ "use": "0x1000292f4#236",
+ "input_index": 1
+ },
+ {
+ "ordinal": 6,
+ "use": "0x1000292fc#1713",
+ "input_index": 0
+ },
+ {
+ "ordinal": 6,
+ "use": "0x100029308#1714",
+ "input_index": 0
+ },
+ {
+ "ordinal": 6,
+ "use": "0x100029314#1715",
+ "input_index": 0
+ },
+ {
+ "ordinal": 6,
+ "use": "0x10002935c#340",
+ "input_index": 1
+ }
+ ],
+ "truncated": false,
+ "omitted_operations_lower_bound": 0,
+ "known_omitted_inputs": 0,
+ "known_omitted_edges": 0,
+ "limitations": [
+ "High p-code is decompiler-derived, not original source or runtime behavior. is_dead preserves the Java AST flag; decoded block members can retain that flag, so block_membership separately reports actual syntax-tree membership.",
+ "Def-use links do not cross function boundaries and may omit memory aliasing, call side effects, or unresolved indirect flow.",
+ "Memory read/write effects include stack and temporary memory operations; they do not identify persistent state or business meaning.",
+ "Operation, input, and def-use limits can truncate large functions; inspect truncation, omitted lower bounds, and known omitted counts before drawing conclusions.",
+ "Known omitted-edge counts cover links omitted from retained operations; omitted operations may contain additional uncounted links."
+ ]
+ },
+ "limitations": [
+ "Unresolved computed or indirect flows without target addresses are not represented as reference edges.",
+ "Thunk and external classifications are Ghidra FunctionManager observations; they do not resolve targetless calls.",
+ "Pseudocode and assembly are Ghidra-specific representations, not original source or Hopper-equivalent text.",
+ "Synthetic Ghidra entry-point references without actionable memory sources are omitted."
+ ]
+ },
+ "confidence": "observed",
+ "authority": "shipped-artifact",
+ "environment": null,
+ "limitations": [
+ "The session serves operations only after Ghidra reports default auto-analysis complete; incomplete analysis does not expose partial results.",
+ "The imported Program and temporary project are ephemeral and deleted on close. Annotation operations edit session database metadata; original executable bytes are never written.",
+ "Cancelling an active Ghidra request terminates its ephemeral database and discards session annotations. The selected target remains open; the next provider query imports the original artifact again.",
+ "Default-space addresses use lowercase 0x-prefixed hexadecimal; other address spaces use :0x.",
+ "References cover the complete Ghidra function-body AddressSet and exact entry. Dossier incoming edges omit sources owned by that function; procedure_references also retains those internal edges.",
+ "The dossier combines Ghidra FunctionManager, Listing, ReferenceManager, BasicBlockModel, and decompiler observations; provider-specific pseudocode and assembly are not cross-provider text invariants.",
+ "Resolved reference metadata identifies computed, indirect, external, call, jump, and data edges; unresolved targetless flows remain unknown, and function classifications distinguish thunks and externals.",
+ "Synthetic Ghidra entry-point references without actionable memory sources are omitted.",
+ "The Java bridge serializes one function request per Program and lets each decompilation run until it completes or the caller cancels.",
+ "macOS sessions require a matching executable Ghidra native decompiler; REA checks for it but does not build native components or change Gatekeeper quarantine state."
+ ],
+ "locations": [],
+ "evidence_links": []
+ }
+ ]
+}
diff --git a/docs/analysis/下巴与坐标分析.md b/docs/analysis/下巴与坐标分析.md
index ae30908..60f0c65 100644
--- a/docs/analysis/下巴与坐标分析.md
+++ b/docs/analysis/下巴与坐标分析.md
@@ -21,3 +21,18 @@
纯CI图像中,76点落在真实瞳孔和下巴,没有全局Y轴反置。但FxPlug适配层曾根据imageOrigin在输入、输出各翻转一次。以相同物理top-first照片字节离屏构造TOP_LEFT输入输出时,旧代码默认直通仍精确一致,却能复现下巴作用到眼部的现象;这说明直通测试无法排除中间处理倒置。
imageOrigin描述坐标轴方向,不能单凭枚举推断IOSurface的物理行序。原版render主入口包装CIImage后仅见正尺度和位移,仍需核对其输出helper,不能仅凭主函数的有界检索宣称原版整个链条无翻转。原生FCP本次实际缓冲行序未捕获,最后视觉交由用户自测。临时照片、完整人脸坐标和探针输出均留在被忽略的build目录。
+
+## 原版输出链闭环与适配修复
+
+继续REA分析两个输出helper后,确认主入口所见的无额外翻转不是仅靠字符串缺失作出的猜测:
+
+- `0x10002911c`直接调用`CIContext render:toIOSurface:bounds:colorSpace:`,没有修改图像方向。证据`ev_88a71ec62fade296495f1e3f5428cdb15ad4cda43866e09fb040fa3a4bdb0440`。
+- `0x1000291b4`备用路径先render到BGRA8/RGBAh/RGBAf位图,再按源、目的行步长同时正向递增复制到IOSurface,没有倒行。证据`ev_110d76f7958decb0c56b7daafe292d60a8bc56cd035b40a997f61395cb91ebfe`,另有汇编交叉核对。完整记录见[rea-image-orientation.json](rea-image-orientation.json)。
+
+已移除我们输入/输出两处基于TOP_LEFT的额外翻转,保持与原版同类CI→IOSurface路径一致。独立探针在相同物理top-first字节下验证默认/大眼/下巴正负×四种源/目的标签共16组,全部与upright CI参考逐字节一致;旧代码在相同构造下出现下巴到眼部的热点,且默认直通0误差不能揭示内部倒置。这里验证的是物理缓冲构造与修复链,未捕获本次实际FCP缓冲。
+
+Apple[FxImageOrigin](https://developer.apple.com/documentation/professional_video_applications/fximageorigin)和本机SDK说明其描述坐标轴方向;[FxPlug渲染说明](https://developer.apple.com/documentation/professional-video-applications/rendering-in-fxplug)确认FxPlug4经IOSurface传入图像。文档本身未规定每个宿主的物理行序,本次改动依据为原版链和独立物理测试,不能把文档扩张成原生内存捕获。
+
+旧档案没有记录图像适配坐标契约,无法安全判断是否由旧翻转链产生。adapter现为新分析结果加`hostCoordinateSpace=iosurface-ci-y-up-v1`;未标记记录保留原字符串,渲染和续分析均不载入旧坐标。当前目标暂用实时跟随,新分析后恢复离线记录。不改通用PGFaceProcessor的旧档案读取能力,也不把用户记录直接删除或静默改写成新坐标。
+
+独立生理热点检查:NASA、实际素材0秒、4秒侧脸三张图均在真实下巴1.2–2.9像素内获得最大位移,实际下巴正值上收、负值延伸,双瞳孔采样位移不超过0.00003像素;12项专项检查通过。另同一素材11帧共494项瘦脸/下巴ASan检查通过,含重复基础用例,不与完整回归简单相加。用户照片、帧及完整点位均没有入库。
diff --git a/docs/analysis/脸型变形与转脸分析.md b/docs/analysis/脸型变形与转脸分析.md
index 38a2a20..42bf39d 100644
--- a/docs/analysis/脸型变形与转脸分析.md
+++ b/docs/analysis/脸型变形与转脸分析.md
@@ -82,3 +82,5 @@ xcrun clang -fobjc-arc -Wall -Wextra \
## 后续修复状态
1.0.5已实现并安装76点/17组局部瘦脸,旧的矩形框瘦脸已移除。上文“安装版未修复”为本次分析开始时1.0.4的历史状态。新增独立数值场与真实素材回归,签名公证及安装记录见 `../验证记录.md`。Motion/FCP最终视觉由用户自测,其他8类脸型控制与快速多人重叠的既有近似边界仍保留。
+
+1.0.6继续分析下巴与宿主图像轴,新增原版三pin下巴及CI/IOSurface无额外翻转修复,详见[下巴与坐标分析](下巴与坐标分析.md)。其余七类控制仍为近似实现。
diff --git a/docs/verification/v1.0.6/anatomical-summary.json b/docs/verification/v1.0.6/anatomical-summary.json
new file mode 100644
index 0000000..a6c0ab3
--- /dev/null
+++ b/docs/verification/v1.0.6/anatomical-summary.json
@@ -0,0 +1,15 @@
+{
+ "checks": 12,
+ "cases": 3,
+ "includes_profile": true,
+ "processor_sha256": "fe4f2a6fc28799cc9b81832baaa2d6739320bde9def175ecc8a4494d004d6b28",
+ "max_pupil_sampling_displacement_px": 2.8653327774463833e-05,
+ "peak_distance_to_real_chin_px": [
+ 1.1827483260479077,
+ 2.8140858161593
+ ],
+ "positive_visual_direction": "toward lower lip",
+ "negative_visual_direction": "away from lower lip",
+ "actual_photos_and_full_geometry": "ignored local build only",
+ "scope": "standalone actual PNG anatomy; bypasses FxPlug adapter; no native host operation"
+}
diff --git a/docs/verification/v1.0.6/core-tests.txt b/docs/verification/v1.0.6/core-tests.txt
new file mode 100644
index 0000000..c5b3086
--- /dev/null
+++ b/docs/verification/v1.0.6/core-tests.txt
@@ -0,0 +1,5 @@
+Beauty renderer: 49 checks, 0 failures (Metal).
+2026-10-21 20:48:04.999 face-tests[9473:5455578] FBBA: creating VNFaceBBoxAligner from VNFaceDetectorRevision2: VNFaceDetectorRevision2
+Face processing: 116 checks passed
+2026-10-21 20:48:08.750 slim-tests[9480:5455684] FBBA: creating VNFaceBBoxAligner from VNFaceDetectorRevision2: VNFaceDetectorRevision2
+PASS: 394 slim alignment checks; maximum UV oracle error 1.09828022e-05
diff --git a/docs/verification/v1.0.6/host-tests.txt b/docs/verification/v1.0.6/host-tests.txt
new file mode 100644
index 0000000..6d9e2d7
--- /dev/null
+++ b/docs/verification/v1.0.6/host-tests.txt
@@ -0,0 +1,21 @@
+2026-10-21 20:55:46.681 host-tests[10689:5467036] FBBA: creating VNFaceBBoxAligner from VNFaceDetectorRevision2: VNFaceDetectorRevision2
+Default IOSurface maximum byte difference: 0
+Alternate destination tag maximum byte difference: 0
+Anatomy default 0/0 max=0 mean=0.0000000 eye=0/0 chin=0 inverted=0
+Anatomy default 0/1 max=0 mean=0.0000000 eye=0/0 chin=0 inverted=0
+Anatomy default 1/0 max=0 mean=0.0000000 eye=0/0 chin=0 inverted=0
+Anatomy default 1/1 max=0 mean=0.0000000 eye=0/0 chin=0 inverted=0
+Anatomy big-eye 0/0 max=2 mean=0.0008917 eye=33510/33880 chin=0 inverted=0
+Anatomy big-eye 0/1 max=2 mean=0.0008917 eye=33510/33880 chin=0 inverted=0
+Anatomy big-eye 1/0 max=2 mean=0.0008917 eye=33510/33880 chin=0 inverted=0
+Anatomy big-eye 1/1 max=2 mean=0.0008917 eye=33510/33880 chin=0 inverted=0
+Anatomy chin-positive 0/0 max=1 mean=0.0001459 eye=0/0 chin=116812 inverted=0
+Anatomy chin-positive 0/1 max=1 mean=0.0001459 eye=0/0 chin=116812 inverted=0
+Anatomy chin-positive 1/0 max=1 mean=0.0001459 eye=0/0 chin=116812 inverted=0
+Anatomy chin-positive 1/1 max=1 mean=0.0001459 eye=0/0 chin=116812 inverted=0
+Anatomy chin-negative 0/0 max=1 mean=0.0000849 eye=0/0 chin=60426 inverted=0
+Anatomy chin-negative 0/1 max=1 mean=0.0000849 eye=0/0 chin=60426 inverted=0
+Anatomy chin-negative 1/0 max=1 mean=0.0000849 eye=0/0 chin=60426 inverted=0
+Anatomy chin-negative 1/1 max=1 mean=0.0000849 eye=0/0 chin=60426 inverted=0
+Legacy fallback upright comparison: max=2 mean=0.0010357
+Host adapter: 247 checks, 0 failures
diff --git a/docs/verification/v1.0.6/osc-tests.txt b/docs/verification/v1.0.6/osc-tests.txt
new file mode 100644
index 0000000..5b42805
--- /dev/null
+++ b/docs/verification/v1.0.6/osc-tests.txt
@@ -0,0 +1,21 @@
+2026-10-21 20:53:14.697 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.25,0.75) setter=(0.25,0.75) readback=(0.25,0.75) mode=normalized verified=1
+2026-10-21 20:53:14.705 osc-tests[10458:5463835] PGFaceOSC coordinates selection=(0.25,0.75) objectBounds=(-100,-50,200,100) canvas=(80,180) surface=320x240 origin=0
+2026-10-21 20:53:15.118 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.8,0.3) setter=(1152,-432) readback=(0.8,0.3) mode=centered-pixels verified=1
+2026-10-21 20:53:15.118 osc-tests[10458:5463835] PGFaceOSC coordinates selection=(0.7,0.4) objectBounds=(-1920,-1080,3840,2160) canvas=(152,78) surface=320x240 origin=0
+2026-10-21 20:53:15.168 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.8,0.3) setter=(0.8,0.3) readback=(0.12345,0.87654) mode=normalized verified=0
+2026-10-21 20:53:15.168 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.75,0.25) setter=(0.75,0.25) readback=(0.75,0.25) mode=normalized verified=1
+2026-10-21 20:53:15.168 osc-tests[10458:5463835] PGFaceOSC coordinates selection=(0.75,0.25) objectBounds=(-100,-50,200,100) canvas=(160,60) surface=320x240 origin=0
+2026-10-21 20:53:15.218 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.625,0.375) setter=(0.625,0.375) readback=(0.625,0.375) mode=normalized verified=1
+2026-10-21 20:53:15.218 osc-tests[10458:5463835] PGFaceOSC coordinates selection=(0.625,0.375) objectBounds=(-100,-50,200,100) canvas=(240,60) surface=320x240 origin=0
+2026-10-21 20:53:15.268 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.25,0.75) setter=(0.25,0.75) readback=(0.25,0.75) mode=normalized verified=1
+2026-10-21 20:53:15.268 osc-tests[10458:5463835] PGFaceOSC coordinates selection=(0.25,0.75) objectBounds=(-100,-50,200,100) canvas=(144,180) surface=320x240 origin=0
+2026-10-21 20:53:15.318 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.5,0.5) setter=(0.5,0.5) readback=(0.5,0.5) mode=normalized verified=1
+2026-10-21 20:53:15.318 osc-tests[10458:5463835] PGFaceOSC coordinates selection=(0,1) objectBounds=(-100,-50,200,100) canvas=(100,140) surface=320x240 origin=0
+2026-10-21 20:53:15.369 osc-tests[10458:5463835] PGFaceOSC coordinates selection=(0.25,0.75) objectBounds=(-100,-50,200,100) canvas=(nan,nan) surface=320x240 origin=0
+2026-10-21 20:53:15.418 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.5,0.5) setter=(0.5,0.5) readback=(0.5,0.5) mode=normalized verified=1
+2026-10-21 20:53:15.418 osc-tests[10458:5463835] PGFaceOSC coordinates selection=(0.25,0.75) objectBounds=(-100,-50,200,100) canvas=(inf,nan) surface=320x240 origin=0
+2026-10-21 20:53:15.467 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.5,0.5) setter=(0.5,0.5) readback=(0.5,0.5) mode=normalized verified=1
+2026-10-21 20:53:15.467 osc-tests[10458:5463835] PGFaceOSC coordinates selection=(0.25,0.75) objectBounds=(-100,-50,200,100) canvas=(80,nan) surface=320x240 origin=0
+2026-10-21 20:53:15.517 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.5,0.5) setter=(0.5,0.5) readback=(0.5,0.5) mode=normalized verified=1
+2026-10-21 20:53:15.517 osc-tests[10458:5463835] PGFaceOSC point-write desired=(0.5,0.5) setter=(0.5,0.5) readback=(0.5,0.5) mode=normalized verified=1
+OSC adapter: 98 checks, 0 failures
diff --git a/docs/verification/v1.0.6/slim-chin-real-video-asan.txt b/docs/verification/v1.0.6/slim-chin-real-video-asan.txt
new file mode 100644
index 0000000..900c6e4
--- /dev/null
+++ b/docs/verification/v1.0.6/slim-chin-real-video-asan.txt
@@ -0,0 +1,2 @@
+2026-10-21 20:50:27.412 slim-chin-asan[10123:5460221] FBBA: creating VNFaceBBoxAligner from VNFaceDetectorRevision2: VNFaceDetectorRevision2
+PASS: 494 slim alignment checks; maximum UV oracle error 1.09828022e-05
diff --git a/docs/验证记录.md b/docs/验证记录.md
index 9278469..d872637 100644
--- a/docs/验证记录.md
+++ b/docs/验证记录.md
@@ -61,3 +61,11 @@ Motion:独立普通视频项目,源PTS0、1920×1080/25fps/10秒,媒体通
额外用用户视频11帧(含4秒及18秒明显侧脸)运行264项瘦脸ASan检查,通过且未发现内存错误;此数包含重复的220项基础数值/数据检查,不与604简单相加。独立恢复从远程abe97ed0cbd5a2b5ffda6ebdb486d3bff9170964克隆,69文件/9资源和模式一致、strict fsck通过,clone内389项Metal/人脸/瘦脸测试通过。签名构建源码就是该节点;后续交付脚本补充了已公证产物校验恢复与重复注销兼容,产品源码未再变化。
正式安装APP仅位于 `/Library/Plug-Ins/FxPlug/beatygril.app`;配套1.0.5模板及占位资源已同步并逐字节核验。临时构建、旧版APP备份、公证ZIP已清理;项目、DerivedData、桌面、下载、Applications及系统/用户FxPlug目录扫描只发现该正式APP,无扫描错误。原生效果验收状态为用户自测待完成。票据、发现、恢复与检测报告见 `docs/verification/v1.0.5/`。
+
+## 1.0.6 下巴与图像轴修复(构建前)
+
+用户反馈“下巴调整作用到眼睛”。纯CI76点物理位置并未全局反置,但FxPlug适配器曾将TOP_LEFT当作物理行序,在输入和输出各多翻转一次;默认直通会抵消,无法验证中间Vision和变形的解剖方向。独立top-first照片构造复现下巴跑向眼部;原版REA输入及两条CI→IOSurface输出路径均没有同样额外翻转,现删除这两处。未捕获本次实际FCP缓冲,原生视觉由用户自测。
+
+下巴另有旧框高斯算法和正负符号错误,现按原版68→38、67→37、66→36三pin、正0.04/负0.02和共同尺寸增益对齐。数学场、真实图物理下巴/瞳孔、正负符号与侧脸热点均已检查;其余七类控制及全部组合顺序未宣称完整恢复。新分析记录写入显式坐标标记;旧未标记记录保留但不再重放,自动回退实时跟随,重新分析可恢复离线记录。
+
+本轮不操作、启动或退出Motion/FCP。完整分析证据见[下巴与坐标分析](analysis/下巴与坐标分析.md)。完整904项通过(美化49、人脸116、瘦脸/下巴394、宿主适配247、OSC98),宿主适配和OSC启用ASan。宿主适配16种默认/大眼/下巴正负×源/目的原点组合彼此逐字节一致,与独立upright文件参考最大差2/255;独立文件解码和IOSurface检测路径存在微小数值差,阈值另限制均差<0.005/255,并检查实际解剖热点。额外用户视频11帧494项ASan通过,含重复基础用例,不与904简单相加。用户帧和完整点位未上传远程。当前正式APP仍为1.0.5,不能将构建前验证描述为1.0.6已安装。
diff --git a/tests/host_adapter_tests.m b/tests/host_adapter_tests.m
index 8091c15..f996613 100644
--- a/tests/host_adapter_tests.m
+++ b/tests/host_adapter_tests.m
@@ -7,6 +7,9 @@
#import
#import "beatygrilPlugIn.h"
#import "PGParameterIDs.h"
+#import "PGFaceProcessor.h"
+#import "PGBeautyRenderer.h"
+#include
// This adapter simulates host callbacks, but uses real IOSurface buffers and the
// production FxPlug entry points. It does not simulate FCP plugin discovery/UI.
@@ -173,6 +176,12 @@ static NSUInteger MaximumDifference(NSData *a, NSData *b) {
for (NSUInteger i = 0; i < a.length; i++) maximum = MAX(maximum, (NSUInteger)abs(x[i] - y[i]));
return maximum;
}
+static double MeanDifference(NSData *a, NSData *b) {
+ if (!a.length || a.length != b.length) return INFINITY;
+ const uint8_t *x = a.bytes, *y = b.bytes; double total = 0;
+ for (NSUInteger i = 0; i < a.length; i++) total += abs(x[i]-y[i]);
+ return total/a.length;
+}
static NSData *ExpectedCrop(PGHostTile *source, NSUInteger x, NSUInteger y, NSUInteger width, NSUInteger height, BOOL flip) {
NSData *sourceBytes = SurfaceBytes(source); size_t sourceWidth = IOSurfaceGetWidth((__bridge IOSurfaceRef)source.storage);
NSMutableData *result = [NSMutableData dataWithLength:width * height * 4];
@@ -200,6 +209,204 @@ static void RejectState(beatygrilPlugIn *plugin, PGHostTile *destination, PGHost
Check(!rendered && !escaped && error != nil, description);
}
static NSData *PlistState(id value) { return [NSPropertyListSerialization dataWithPropertyList:value format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil]; }
+// Decode independently of CI/IOSurface, so a pair of adapter flips cannot
+// silently cancel in our test input and expected output. ImageIO + Quartz gives
+// the NASA fixture top-first BGRA bytes, also cross-checked against Pillow.
+static NSData *DecodedPortrait(NSString *path, size_t *width, size_t *height) {
+ CGImageSourceRef source = CGImageSourceCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:path], NULL);
+ CGImageRef image = source ? CGImageSourceCreateImageAtIndex(source, 0, NULL) : NULL;
+ if (source) CFRelease(source);
+ if (!image) return nil;
+ *width = CGImageGetWidth(image); *height = CGImageGetHeight(image);
+ NSMutableData *bytes = [NSMutableData dataWithLength:*width * *height * 4];
+ CGColorSpaceRef space = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
+ CGContextRef context = CGBitmapContextCreate(bytes.mutableBytes, *width, *height, 8, *width * 4, space,
+ kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
+ if (context) {
+ CGContextSetBlendMode(context, kCGBlendModeCopy);
+ CGContextSetInterpolationQuality(context, kCGInterpolationNone);
+ CGContextDrawImage(context, CGRectMake(0, 0, *width, *height), image);
+ CGContextRelease(context);
+ }
+ CGColorSpaceRelease(space); CGImageRelease(image);
+ return context ? bytes : nil;
+}
+static BOOL StoreSurfaceBytes(PGHostTile *tile, NSData *bytes) {
+ IOSurfaceRef surface = (__bridge IOSurfaceRef)tile.storage;
+ size_t width = IOSurfaceGetWidth(surface), height = IOSurfaceGetHeight(surface);
+ if (bytes.length != width * height * 4) return NO;
+ IOSurfaceLock(surface, 0, NULL);
+ for (size_t row = 0; row < height; row++)
+ memcpy((uint8_t *)IOSurfaceGetBaseAddress(surface) + row * IOSurfaceGetBytesPerRow(surface),
+ (const uint8_t *)bytes.bytes + row * width * 4, width * 4);
+ IOSurfaceUnlock(surface, 0, NULL);
+ return YES;
+}
+static CIContext *NumericContext(void) {
+ return [CIContext contextWithMTLDevice:MTLCreateSystemDefaultDevice() options:@{
+ kCIContextWorkingColorSpace:NSNull.null, kCIContextOutputColorSpace:NSNull.null}];
+}
+static NSData *ImageBytes(CIContext *context, CIImage *image) {
+ if (!image) return nil;
+ size_t width = (size_t)image.extent.size.width, height = (size_t)image.extent.size.height;
+ NSMutableData *bytes = [NSMutableData dataWithLength:width * height * 4];
+ [context render:image toBitmap:bytes.mutableBytes rowBytes:width * 4 bounds:image.extent format:kCIFormatBGRA8 colorSpace:nil];
+ return bytes;
+}
+static CIImage *ProcessedReference(CIImage *image, PGBeautySettings settings, CMTime time, NSData *track) {
+ PGFaceProcessor *faces = [PGFaceProcessor new];
+ if (track) [faces setTrackingData:track forTarget:settings.targetIndex];
+ NSError *error = nil;
+ PGFaceFrame *frame = [faces processImage:image settings:settings time:time error:&error];
+ if (!frame) return nil;
+ return [[PGBeautyRenderer new] processImage:frame.image settings:settings skinMask:frame.skinMask
+ colorMask:frame.colorMask teethMask:frame.teethMask eyeMask:frame.eyeMask error:&error];
+}
+static CGPoint LandmarkCenter(VNFaceLandmarkRegion2D *region, CGRect box, CGSize size) {
+ CGPoint center = CGPointZero;
+ if (!region.pointCount || !region.normalizedPoints) return center;
+ for (NSUInteger i = 0; i < region.pointCount; i++) {
+ center.x += region.normalizedPoints[i].x; center.y += region.normalizedPoints[i].y;
+ }
+ center.x /= region.pointCount; center.y /= region.pointCount;
+ return CGPointMake((box.origin.x + center.x * box.size.width) * size.width,
+ (1 - box.origin.y - center.y * box.size.height) * size.height);
+}
+static double ChangeMass(NSData *baseline, NSData *changed, size_t width, CGRect region) {
+ if (baseline.length != changed.length || !width) return INFINITY;
+ const uint8_t *a = baseline.bytes, *b = changed.bytes;
+ size_t height = baseline.length / (width * 4); double total = 0;
+ for (size_t row = 0; row < height; row++) for (size_t x = 0; x < width; x++)
+ if (CGRectContainsPoint(region, CGPointMake(x + .5, row + .5))) {
+ size_t i = (row * width + x) * 4;
+ for (size_t c = 0; c < 3; c++) total += abs(a[i+c] - b[i+c]);
+ }
+ return total;
+}
+static void PortraitAnatomyTests(NSString *fixture, CIImage *portrait) {
+ size_t width = 0, height = 0;
+ NSData *canonical = DecodedPortrait(fixture, &width, &height);
+ Check(canonical != nil && width == 512 && height == 512, @"independent ImageIO/Quartz decodes the 512px NASA fixture");
+ if (!canonical || width != 512 || height != 512 || !portrait) return;
+ // Asymmetric samples pin the decoder's physical row/column order. These
+ // values match Pillow's RGB decode exactly, independently of Core Image.
+ const size_t positions[][2] = {{16,16},{100,250},{205,100},{222,178},{480,450}};
+ const uint8_t samples[][4] = {{35,6,14,255},{93,132,234,255},{11,35,58,255},{42,73,102,255},{2,1,3,255}};
+ BOOL samplesMatch = YES;
+ for (size_t i = 0; i < 5; i++)
+ samplesMatch &= memcmp((const uint8_t *)canonical.bytes + (positions[i][1]*width + positions[i][0])*4, samples[i], 4) == 0;
+ Check(samplesMatch, @"independent asymmetric pixels establish top-first BGRA and the horizontal direction");
+ CIContext *context = NumericContext();
+ Check(MaximumDifference(canonical, ImageBytes(context, portrait)) <= 1, @"upright CI file decode agrees with independent physical source bytes");
+ PGFaceFrame *detected = [[PGFaceProcessor new] processImage:portrait settings:PGBeautyDefaults() time:kCMTimeZero error:nil];
+ VNFaceObservation *face = detected.faces.firstObject;
+ Check(face.landmarks.allPoints.pointCount == 76, @"real portrait provides the 76-point anatomy used by chin pins");
+ if (face.landmarks.allPoints.pointCount != 76) return;
+ CGSize size = CGSizeMake(width, height); CGRect box = face.boundingBox;
+ CGPoint left = LandmarkCenter(face.landmarks.leftEye, box, size), right = LandmarkCenter(face.landmarks.rightEye, box, size);
+ CGPoint chin = face.landmarks.allPoints.normalizedPoints[67];
+ chin = CGPointMake((box.origin.x + chin.x * box.size.width)*width, (1-box.origin.y-chin.y*box.size.height)*height);
+ CGFloat fw = box.size.width*width, fh = box.size.height*height;
+ CGRect leftEye = CGRectMake(left.x-fw*.24, left.y-fh*.17, fw*.48, fh*.34);
+ CGRect rightEye = CGRectMake(right.x-fw*.24, right.y-fh*.17, fw*.48, fh*.34);
+ CGRect chinArea = CGRectMake(chin.x-fw*.30, chin.y-fh*.22, fw*.60, fh*.44);
+ CGRect upsideDownFace = CGRectMake(box.origin.x*width, box.origin.y*height, fw, fh);
+ const UInt32 controls[] = {0, PGBigEye, PGChin, PGChin};
+ const double values[] = {0, 1, 1, -1};
+ NSArray *names = @[@"default", @"big-eye", @"chin-positive", @"chin-negative"];
+ for (NSUInteger effect = 0; effect < 4; effect++) {
+ PGBeautySettings settings = PGBeautyDefaults();
+ if (effect == 1) settings.faceBigEye = 1;
+ else if (effect > 1) settings.faceChin = values[effect];
+ NSData *expected = ImageBytes(context, ProcessedReference(portrait, settings, kCMTimeZero, nil));
+ Check(expected.length == canonical.length, [names[effect] stringByAppendingString:@" independent upright face/beauty chain renders"]);
+ if (expected.length != canonical.length) continue;
+ NSData *originBaseline = nil;
+ for (NSUInteger sourceTop = 0; sourceTop < 2; sourceTop++) for (NSUInteger destinationTop = 0; destinationTop < 2; destinationTop++) {
+ @autoreleasepool {
+ PGHostAPI *api = [PGHostAPI new]; beatygrilPlugIn *plugin = [[beatygrilPlugIn alloc] initWithAPIManager:api];
+ Check([plugin addParametersWithError:nil], @"anatomy case creates the real plugin parameters");
+ if (effect) api.values[@(controls[effect])] = @(values[effect]);
+ PGHostTile *input = Tile(width, height, 37, -21, sourceTop ? kFxImageOrigin_TOP_LEFT : kFxImageOrigin_BOTTOM_LEFT);
+ PGHostTile *output = Tile(width, height, 37, -21, destinationTop ? kFxImageOrigin_TOP_LEFT : kFxImageOrigin_BOTTOM_LEFT);
+ // imageOrigin changes coordinate semantics, never these bytes.
+ Check(StoreSurfaceBytes(input, canonical), @"all origin combinations receive identical independently decoded physical rows");
+ Check(Render(plugin, output, @[input], Snapshot(plugin, kCMTimeZero), kCMTimeZero, nil, NULL), @"active anatomy case renders with nonzero tile origin");
+ NSData *actual = SurfaceBytes(output); NSUInteger difference = MaximumDifference(actual, expected);
+ NSString *label = [NSString stringWithFormat:@"%@ source%@/destination%@", names[effect], sourceTop?@"TOP":@"BOTTOM", destinationTop?@"TOP":@"BOTTOM"];
+ // Vision's file-image vs IOSurface path and translated float
+ // coordinates can round by a few byte levels at high contrast.
+ // Bound that error tightly; changing only origin tags must be
+ // exactly invariant, independently of this reference tolerance.
+ Check(difference <= 4 && MeanDifference(actual,expected) < .005, [label stringByAppendingString:@" matches independent upright CI output"]);
+ if (!originBaseline) originBaseline = actual;
+ Check(MaximumDifference(actual,originBaseline) == 0, [label stringByAppendingString:@" is byte-identical across coordinate tags"]);
+ double lm = ChangeMass(canonical, actual, width, leftEye), rm = ChangeMass(canonical, actual, width, rightEye);
+ double cm = ChangeMass(canonical, actual, width, chinArea), um = ChangeMass(canonical, actual, width, upsideDownFace);
+ BOOL located = effect == 0 ? MaximumDifference(canonical, actual) <= 1 :
+ (effect == 1 ? lm > 100 && rm > 100 && cm < (lm+rm)*.01 && um == 0 :
+ cm > 100 && cm > 4*(lm+rm) && um == 0);
+ Check(located, [label stringByAppendingString:effect == 1 ? @" changes the two real eye regions" : (effect ? @" changes the real chin rather than eyes or mirrored anatomy" : @" preserves the independently decoded photo")]);
+ printf("Anatomy %-13s %lu/%lu max=%lu mean=%.7f eye=%.0f/%.0f chin=%.0f inverted=%.0f\n", names[effect].UTF8String,
+ (unsigned long)sourceTop, (unsigned long)destinationTop, (unsigned long)difference, MeanDifference(actual,expected), lm, rm, cm, um);
+ }
+ }
+ }
+}
+static void TrackingCoordinateTests(NSDictionary *archive, NSDictionary *hostValues, PGHostTile *source, CIImage *portrait, CMTime time) {
+ Check([archive[@"hostCoordinateSpace"] isEqual:@"iosurface-ci-y-up-v1"], @"new host analysis stamps its explicit IOSurface/CI coordinate contract");
+ NSMutableDictionary *forged = [NSPropertyListSerialization propertyListWithData:PlistState(archive)
+ options:NSPropertyListMutableContainers format:nil error:nil];
+ if (![forged[@"frames"] isKindOfClass:NSDictionary.class]) { Check(NO, @"analysis archive supplies frames for compatibility regression"); return; }
+ // Retain fully valid topology but move the saved face away from the actual
+ // portrait. A falsely replayed legacy archive must produce a visible error.
+ for (NSMutableDictionary *frame in [forged[@"frames"] allValues]) for (NSMutableDictionary *face in frame[@"faces"]) {
+ NSMutableArray *box = [face[@"box"] mutableCopy]; box[0] = @([box[0] doubleValue]+.2); box[1] = @([box[1] doubleValue]-.25); face[@"box"] = box;
+ for (NSString *name in @[@"leftEye",@"rightEye",@"leftBrow",@"rightBrow",@"nose",@"lips",@"mouth",@"contour",@"points76"]) {
+ if (!face[name]) continue;
+ NSMutableArray *points = [NSMutableArray new];
+ for (NSArray *point in face[name]) [points addObject:@[@([point[0] doubleValue]+.2),@([point[1] doubleValue]-.25)]];
+ face[name] = points;
+ }
+ }
+ [forged removeObjectForKey:@"hostCoordinateSpace"];
+ NSString *legacyString = [PlistState(forged) base64EncodedStringWithOptions:0];
+ NSMutableDictionary *values = [hostValues mutableCopy];
+ values[@(PGTarget)] = @2; values[@(PGTrackEnabled)] = @YES; values[@(PGBigEye)] = @1; values[@(PGChin)] = @1;
+ values[@(PGTrackData3)] = legacyString;
+ PGHostAPI *legacyAPI = [PGHostAPI new]; legacyAPI.hostTime = time;
+ beatygrilPlugIn *legacy = [[beatygrilPlugIn alloc] initWithAPIManager:legacyAPI]; [legacy addParametersWithError:nil]; legacyAPI.values = [values mutableCopy];
+ PGHostTile *output = Tile(512,512,0,0,kFxImageOrigin_TOP_LEFT);
+ Check(Render(legacy, output, @[source], Snapshot(legacy,time), time, nil, NULL), @"unmarked old coordinate archive renders through the real adapter");
+ NSData *legacyBytes = SurfaceBytes(output);
+ PGBeautySettings realtime = [legacy settingsAtTime:time]; realtime.trackingEnabled = 0;
+ CIContext *context = NumericContext();
+ NSData *expectedLive = ImageBytes(context, ProcessedReference(portrait,realtime,time,nil));
+ printf("Legacy fallback upright comparison: max=%lu mean=%.7f\n",(unsigned long)MaximumDifference(legacyBytes,expectedLive),MeanDifference(legacyBytes,expectedLive));
+ Check(expectedLive.length && MaximumDifference(legacyBytes,expectedLive) <= 4 && MeanDifference(legacyBytes,expectedLive) < .005, @"unmarked forged face geometry falls back to realtime upright detection");
+ Check([legacyAPI.values[@(PGTrackData3)] isEqualToString:legacyString] && [legacyAPI.values[@(PGTrackEnabled)] boolValue], @"legacy fallback preserves the user's original archive string and enabled parameter");
+
+ forged[@"hostCoordinateSpace"] = @"iosurface-ci-y-up-v1";
+ NSData *trustedTrack = PlistState(forged);
+ PGHostAPI *trustedAPI = [PGHostAPI new]; trustedAPI.hostTime = time;
+ beatygrilPlugIn *trusted = [[beatygrilPlugIn alloc] initWithAPIManager:trustedAPI]; [trusted addParametersWithError:nil];
+ trustedAPI.values = [values mutableCopy]; trustedAPI.values[@(PGTrackData3)] = [trustedTrack base64EncodedStringWithOptions:0];
+ Check(Render(trusted, output, @[source], Snapshot(trusted,time), time, nil, NULL), @"fresh plugin restores a marked coordinate archive");
+ NSData *trustedBytes = SurfaceBytes(output);
+ PGBeautySettings tracked = [trusted settingsAtTime:time];
+ NSData *expectedSaved = ImageBytes(context, ProcessedReference(portrait,tracked,time,trustedTrack));
+ Check(expectedSaved.length && MaximumDifference(trustedBytes,expectedSaved) <= 1, @"marked saved geometry matches independent exact-time archive replay");
+ Check(MaximumDifference(trustedBytes,expectedLive) > 5, @"forged marked geometry is observably different, making the legacy non-replay assertion meaningful");
+
+ // Reanalysis of an unmarked target starts a fresh compatible archive.
+ [legacy analyzeForward];
+ CMTime next = CMTimeAdd(time,CMTimeMake(10,24));
+ [legacy setupAnalysisForTimeRange:CMTimeRangeMake(time,CMTimeMake(240,24)) frameDuration:CMTimeMake(1,24) error:nil];
+ BOOL analyzed = [legacy analyzeFrame:source atTime:next error:nil] && [legacy cleanupAnalysis:nil];
+ NSData *resaved = [[NSData alloc] initWithBase64EncodedString:legacyAPI.values[@(PGTrackData3)] options:0];
+ NSDictionary *fresh = resaved ? [NSPropertyListSerialization propertyListWithData:resaved options:0 format:nil error:nil] : nil;
+ Check(analyzed && [fresh[@"frames"] count] == 1 && [fresh[@"hostCoordinateSpace"] isEqual:@"iosurface-ci-y-up-v1"], @"reanalysis replaces incompatible geometry with one newly marked frame");
+}
static void WritePortrait(PGHostTile *tile, CIImage *image) {
CIContext *context = [CIContext contextWithOptions:@{kCIContextWorkingColorSpace:NSNull.null, kCIContextOutputColorSpace:NSNull.null}];
[context render:image toIOSurface:(__bridge IOSurfaceRef)tile.storage bounds:image.extent colorSpace:nil];
@@ -283,7 +490,7 @@ int main(int argc, const char *argv[]) {
Check(MaximumDifference(SurfaceBytes(input), SurfaceBytes(output)) <= 1, top ? @"top-left tile preserves sample rows at nonzero origin" : @"bottom-left tile preserves sample rows at nonzero origin");
output.origin = top ? kFxImageOrigin_BOTTOM_LEFT : kFxImageOrigin_TOP_LEFT;
Check(Render(plugin, output, @[input], state, kCMTimeZero, &error, NULL), @"opposite-origin tile renders");
- Check(MaximumDifference(ExpectedCrop(input, 0, 0, 48, 32, YES), SurfaceBytes(output)) <= 1, @"opposite image origins flip rows exactly once");
+ Check(MaximumDifference(SurfaceBytes(input), SurfaceBytes(output)) <= 1, @"opposite coordinate tags preserve the same physical IOSurface rows");
}
PGHostTile *full = Tile(48, 32, 37, -21, kFxImageOrigin_BOTTOM_LEFT), *crop = Tile(16, 12, 43, -17, kFxImageOrigin_BOTTOM_LEFT); Fill(full);
Check(Render(plugin, crop, @[full], state, kCMTimeZero, &error, NULL), @"destination sub-tile renders from full input buffer");
@@ -298,11 +505,12 @@ int main(int argc, const char *argv[]) {
Check(cropDifference <= 1, @"destination sub-tile translates global pixel bounds correctly");
full.origin = kFxImageOrigin_TOP_LEFT; crop.origin = kFxImageOrigin_TOP_LEFT;
Check(Render(plugin, crop, @[full], state, kCMTimeZero, &error, NULL), @"top-left destination sub-tile renders");
- Check(MaximumDifference(ExpectedCrop(full, 6, 4, 16, 12, NO), SurfaceBytes(crop)) <= 1, @"top-left sub-tile selects correct physical source rows");
+ Check(MaximumDifference(ExpectedCrop(full, 6, 16, 16, 12, NO), SurfaceBytes(crop)) <= 1, @"top-left coordinate tag does not reverse the sub-tile's physical source rows");
NSString *fixture = argc > 1 ? @(argv[1]) : @"tests/fixtures/astronaut.png";
CIImage *portrait = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:fixture] options:@{kCIImageColorSpace:NSNull.null}];
Check(portrait != nil, @"NASA portrait opens for full adapter test");
+ PortraitAnatomyTests(fixture, portrait);
PGHostTile *portraitSource = Tile(512, 512, 0, 0, kFxImageOrigin_BOTTOM_LEFT), *portraitOutput = Tile(512, 512, 0, 0, kFxImageOrigin_BOTTOM_LEFT);
WritePortrait(portraitSource, portrait);
api.values[@(PGThin)] = @0.8; api.values[@(PGBigEye)] = @0.6; api.values[@(PGMidtone)] = @0.8; api.values[@(PGBrightness)] = @0.25; api.values[@(PGMix)] = @0;
@@ -339,6 +547,7 @@ int main(int argc, const char *argv[]) {
NSData *tracking = [[NSData alloc] initWithBase64EncodedString:target options:0];
NSDictionary *trackingArchive = tracking ? [NSPropertyListSerialization propertyListWithData:tracking options:0 format:nil error:nil] : nil;
Check([trackingArchive[@"frames"] count] == 2, @"old render snapshot does not erase either newly analyzed frame");
+ TrackingCoordinateTests(trackingArchive,api.values,portraitSource,portrait,api.hostTime);
Check([api.values[@(PGTrackEnabled)] boolValue] && CMTimeCompare(api.lastSetBoolTime, api.hostTime) == 0, @"analysis enables saved target at host seed time");
NSData *trackedState = Snapshot(plugin, api.hostTime);
beatygrilPlugIn *restoredPlugin = [[beatygrilPlugIn alloc] initWithAPIManager:api];